package com.jsowell.thirdparty.xindiantu.service;

import com.jsowell.pile.dto.*;
import com.jsowell.pile.thirdparty.CommonParamsDTO;
import com.jsowell.thirdparty.zhongdianlian.dto.ZDLGetTokenDTO;

import java.io.UnsupportedEncodingException;
import java.util.Map;

/**
 * 新电途Service
 *
 * @author Lemon
 * @Date 2023/12/27 14:27:42
 */
public interface XDTService {
    /**
     * 获取令牌
     * @param dto
     * @return
     */
    public String getToken(ZDLGetTokenDTO dto);

    /**
     * 生成token
     * @param dto
     * @return
     */
    Map<String, String> generateToken(CommonParamsDTO dto) throws UnsupportedEncodingException;

    /**
     * 校验签名
     * @param dto
     */
    Map<String, String> checkoutSign(CommonParamsDTO dto);

    /**
     * 查询站点信息
     * @param dto
     * @return
     */
    public Map<String, String> queryStationsInfo(QueryStationInfoDTO dto);

    /**
     * 查询统计信息
     * @param dto
     * @return
     */
    Map<String, String> queryStationStatus(QueryStationInfoDTO dto);

    /**
     * 请求设备认证
     * @param dto
     * @return
     */
    Map<String, String> queryEquipAuth(QueryEquipmentDTO dto);

    /**
     * 请求开始充电
     * @param dto
     * @return
     */
    Map<String, String> queryStartCharge(QueryStartChargeDTO dto);

    /**
     * 查询业务策略信息结果
     * @param dto
     * @return
     */
    Map<String, String> queryEquipBusinessPolicy(QueryStartChargeDTO dto);

    /**
     * 设备状态变化推送
     * @param dto
     * @return
     */
    String notificationStationStatus(PushRealTimeInfoDTO dto);

    /**
     * 推送充电订单信息
     * @param orderCode
     * @return
     */
    String pushChargeOrderInfo(String orderCode);

    /**
     * 查询充电状态
     * @param dto
     */
    Map<String, String> queryEquipChargeStatus(QueryEquipChargeStatusDTO dto);

    /**
     * 请求停止充电
     * @param dto
     * @return
     */
    Map<String, String> queryStopCharge(QueryStartChargeDTO dto);

    /**
     * 推送启动充电结果
     * @return
     */
    String notificationStartChargeResult(String orderCode);

    /**
     * 推送停止充电结果(仅在 0x19的帧类型中调用)
     * @param orderCode
     * @return
     */
    String notificationStopChargeResult(String orderCode);

    /**
     * 推送充电状态
     * @param orderCode
     * @return
     */
    String notificationEquipChargeStatus(String orderCode) throws UnsupportedEncodingException;


    String pushStationInfo(PushStationInfoDTO dto);

    String pushStationInfoV2(PushStationInfoDTO dto);
}