package com.jsowell.pile.service;

import com.jsowell.common.core.page.PageResponse;
import com.jsowell.pile.domain.PileConnectorInfo;
import com.jsowell.pile.dto.QueryConnectorDTO;
import com.jsowell.pile.dto.QueryConnectorListDTO;
import com.jsowell.pile.vo.base.ConnectorInfoVO;
import com.jsowell.pile.vo.web.PileConnectorInfoVO;

import java.util.List;
import java.util.Map;

/**
 * 充电桩枪口信息Service接口
 *
 * @author jsowell
 * @date 2022-08-31
 */
public interface IPileConnectorInfoService {
    /**
     * 查询充电桩枪口信息
     *
     * @param id 充电桩枪口信息主键
     * @return 充电桩枪口信息
     */
    PileConnectorInfo selectPileConnectorInfoById(Integer id);

    /**
     * 查询充电桩枪口信息列表
     *
     * @param pileConnectorInfo 充电桩枪口信息
     * @return 充电桩枪口信息集合
     */
    List<PileConnectorInfo> selectPileConnectorInfoList(PileConnectorInfo pileConnectorInfo);

    List<PileConnectorInfo> selectPileConnectorInfoList(String pileSn);

    /**
     * 新增充电桩枪口信息
     *
     * @param pileConnectorInfo 充电桩枪口信息
     * @return 结果
     */
    // int insertPileConnectorInfo(PileConnectorInfo pileConnectorInfo);

    /**
     * 修改充电桩枪口信息
     *
     * @param pileConnectorInfo 充电桩枪口信息
     * @return 结果
     */
    // int updatePileConnectorInfo(PileConnectorInfo pileConnectorInfo);

    /**
     * 批量删除充电桩枪口信息
     *
     * @param ids 需要删除的充电桩枪口信息主键集合
     * @return 结果
     */
    // int deletePileConnectorInfoByIds(Integer[] ids);

    int deletePileConnectorInfoByPileSnList(List<String> pileSnList);

    int batchInsertConnectorInfo(List<PileConnectorInfo> pileConnectorInfoList);

    /**
     * 充电接口信息列表
     *
     * @param dto 前台参数
     * @return 充电接口对象集合
     */
    List<PileConnectorInfoVO> getConnectorInfoListByParams(QueryConnectorDTO dto);

    /**
     * 通过充电站id查询充电枪信息
     *
     * @param stationId 充电站id
     * @return 充电枪信息集合
     */
    List<PileConnectorInfoVO> selectConnectorListByStationId(Long stationId);

    /**
     * 支持多种查询充电桩接口列表
     */
    List<PileConnectorInfoVO> getConnectorInfoListByParams(QueryConnectorListDTO dto);

    /**
     * 更新充电桩枪口状态
     * @param connectorCode 枪口号
     * @param status 状态 0：离网 (默认)；1：空闲；2：占用（未充电）；3：占用（充电中）；4：占用（预约锁定） ；255：故障
     */
    int updateConnectorStatus(String connectorCode, String status);

	/**
     * 通过桩编号修改枪口状态
     * 仅用于登录逻辑使用
     * @param pileSn 桩编号
     * @param status 状态 状态 0：离网 (默认)；1：空闲；2：占用（未充电）；3：占用（充电中）；4：占用（预约锁定） ；255：故障
     */
    int updateConnectorStatusByPileSn(String pileSn, String status);

    /**
     * 批量获取充电桩状态
     * @param pileSnList 桩编号list
     * @return key:桩编号；value:状态值
     */
    Map<String, String> getPileStatus(List<String> pileSnList);

    /**
     * 通过枪口编码查询枪口信息
     *
     * @param connectorCode
     * @return
     */
    PileConnectorInfoVO getPileConnectorInfoByConnectorCode(String connectorCode);

	String getPileConnectorQrCodeUrl(String pileConnectorCode);

	/**
     * 支持多种查询充电桩接口列表（uniapp）
     */
    PageResponse getUniAppConnectorInfoListByParams(QueryConnectorListDTO dto);

    /**
     * uniApp通过站点id查询枪口列表信息
     *
     * @param stationId 站点id
     * @return
     */
    List<ConnectorInfoVO> getUniAppConnectorList(Long stationId);

    List<ConnectorInfoVO> getConnectorListForLianLian(Long stationId);

	List<ConnectorInfoVO> selectConnectorInfoList(String pileSn);

	PageResponse selectStationConnectorList(QueryConnectorListDTO dto);

    /**
     * 根据站点id查询快、慢充设备数量
     * @param stationId
     * @return
     */
	Map<String, Integer> getPileTypeNum(Long stationId);
}
