package com.xhpc.charging.station.service;

import com.xhpc.common.api.dto.XhpcChargingStationDto;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.domain.XhpcChargingStation;
import com.xhpc.common.domain.XhpcRate;
import com.xhpc.common.domain.XhpcRateTime;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 电站Service接口
 *
 * @author yuyang
 * @date 2021-07-19
 */
public interface IXhpcChargingStationService {

    /**
     * 保存电站状态
     *
     * @param chargingStationId 要保存的电站的id
     * @param stationName       充电站名称
     * @param pushStatus        电站的状态 0，1（1表示修改了)
     * @return success or fail
     */
    Integer saveStationStatus(Integer chargingStationId, String stationName, Integer pushStatus);

    /**
     * 查询电站
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    XhpcChargingStation selectXhpcChargingStationById(Long chargingStationId);


    /**
     * 查询电站
     *
     * @param chargingStationName 电站名称
     * @return 电站
     */
    XhpcChargingStation selectXhpcChargingStationByName(String chargingStationName);


    /**
     * 查询电站列表
     *
     * @param name         电站名称
     * @param operatorName 运营商名称
     * @return 电站集合
     */
    List<Map<String, Object>> selectXhpcChargingStationList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId, String name, String operatorName);

    /**
     * 新增电站
     *
     * @param xhpcChargingStation 电站
     * @return 结果
     */
    int insertXhpcChargingStation(XhpcChargingStation xhpcChargingStation);

    /**
     * 修改电站
     *
     * @param xhpcChargingStation 电站
     * @return 结果
     */
    int updateXhpcChargingStation(XhpcChargingStation xhpcChargingStation);

    /**
     * 批量删除电站
     *
     * @param chargingStationIds 需要删除的电站ID
     * @return 结果
     */
    int updateXhpcChargingStationByIds(Long[] chargingStationIds);

    /**
     * 删除电站信息
     *
     * @param chargingStationId 电站ID
     * @return 结果
     */
    int updateXhpcChargingStationById(Long chargingStationId);

    /**
     * 状态（0启用 1停用）
     *
     * @param status            0启用 1停用
     * @param chargingStationId 场站id
     * @return 结果
     */
    int status(Integer status, Long chargingStationId);

    /**
     * APP端、小程序是否可见
     *
     * @param type              0可见 1不可见
     * @param clientVisible     值
     * @param chargingStationId 场站id
     * @return 结果
     */
    int clientVisible(Integer type, String clientVisible, Long chargingStationId);

    /**
     * 合作的电站
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    public List<Map<String, Object>> stationInternetBlackList(Long chargingStationId);

    /**
     * 添加场点
     *
     * @param xhpcChargingStationDto
     * @return
     */
    AjaxResult addXhpcChargingStation(HttpServletRequest request, XhpcChargingStationDto xhpcChargingStationDto);


    /**
     * 电站详情（站点详情）
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    Map<String, Object> getXhpcChargingStationMessage(Long chargingStationId, Integer type);

    /**
     * 微信小程序电站列表
     *
     * @param name              电站名称
     * @param serviceFacilities 标签（服务设施）
     * @param code              城市id
     * @param longitude         经度
     * @param latitude          维度
     * @return
     */
    List<Map<String, Object>> getWXList(String name, String serviceFacilities, Integer code, String longitude, String latitude,String tenantId);


    /**
     * 电站详情（站点详情-小程序）
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    Map<String, Object> getWXXhpcChargingStationMessage(Long chargingStationId, String longitude, String latitude);


    /**
     * 电站详情---价格详情
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    List<Map<String, Object>> getWXXhpcRateTimeMassage(Long chargingStationId);


    /**
     * 电站详情---终端列表
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    List<Map<String, Object>> getWXXhpcTerminalMassage(Long chargingStationId);

    List<Map<String, Object>> getPlaceholderTimeMassage(Long chargingStationId);
    /**
     * 编辑电站（基本信息）
     *
     * @param
     * @return
     */
    AjaxResult updateXhpcTerminal(XhpcChargingStation xhpcChargingStation);

    /**
     * 编辑电站（编辑费率）
     *
     * @param
     * @return
     */
    AjaxResult updateXhpcRateTime(HttpServletRequest request, XhpcChargingStationDto xhpcChargingStationDto);

    /**
     * 上传桩编号和删除编号
     *
     * @param status            0启用 1停用
     * @param chargingStationId 场站id
     */
    void extracted(Integer status, Long chargingStationId);

    /**
     * 终端状态（所有状态集合）
     * @param map
     * @param chargingStationId
     * @return
     */
    Map<String, Object> getTerminalStatusSum(Map<String, Object> map, Long chargingStationId, Integer status);


    /**
     * 单个终端状态（所有状态集合）
     *
     * @param serialNumber
     * @return
     */
    int getTerminalStatus(String serialNumber);

    /**
     * 通过id查找对应的场站
     *
     * @param chargingStationId
     * @return
     */
    Boolean findOneByStationId(Integer chargingStationId);

    /**
     * 编辑一个或多个充电站状态
     *
     * @param chargingStationId
     * @param pushStatus
     * @return
     */
    Integer editStationsStatus(List<Integer> chargingStationId, Integer pushStatus);

    /**
     * 获取登陆用户信息
     */
    Map<String, Object> getLandUser(Long userId);


    /**
     * 删除该场站之前费率、费率时段
     */
    void updateXhpcRateTimeChargingStationId(Long chargingStationId);

    /**
     * 添加费率
     */
    int insertXhpcRate(XhpcRate xhpcRate);

    /**
     * 添加费率时段
     */
    int insertXhpcRateTime(XhpcRateTime xhpcRateTime);

    Map<String,Object> activityDiscountTime(Long userId, Date startTime, Integer source, Long chargingStationId, String tenantId);

    R getNotificationStationInfo(Long stationId);


    void getchargingMethodList();

    R getXhpcRateTimeOrder(Long rateModelId,String startTime, String endTime,String serialNumber);

    R getCrossDayXhpcRateTimeOrder(Long rateModelId,String startTime, String endTime,String serialNumber);


}
