package com.jsowell.thirdparty.huawei;


import com.jsowell.pile.dto.*;
import com.jsowell.pile.dto.huawei.ReceiveDeliverDTO;
import com.jsowell.pile.dto.huawei.VinStartChargeDTO;
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 2024/1/11 9:06:52
 */
public interface HuaWeiService {

    /**
     * 获取令牌
     * @param dto
     * @return
     */
    public String HWGetToken(ZDLGetTokenDTO dto);

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

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

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

    /**
     * 设备接口状态查询
     * 此接口用于批量查询设备实时状态
     *
     * query_station_status
     *
     * @param dto
     * @return
     */
    Map<String, String> queryStationStatus(QueryStationInfoDTO dto);

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

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

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

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

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

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

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

    /**
     * 推送停止充电结果
     *
     * notification_stop_charge_result
     *
     * @param orderCode
     * @return
     */
    String notificationStopChargeResult(String orderCode);

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


    /**
     * 请求计费策略
     * 平台 <-- 华为
     *
     * request_equip_business_policy
     *
     * @param dto
     * @return
     */
    Map<String, String> requestEquipBusinessPolicy(QueryStartChargeDTO dto);

    /**
     * 下发计费策略
     * 平台 --> 华为
     *
     * deliver_equip_business_policy
     *
     * @param equipBizSeq 策略下发流水号
     * @param pileConnectorCode 枪口号
     * @return
     */
    String deliverEquipBusinessPolicy(String equipBizSeq, String pileConnectorCode);


    /**
     * 下发计费策略响应
     * 平台 <-- 华为
     *
     * notification_deliver_equip_business_policy_result
     *
     * @return
     */
    Map<String, String> receiveDeliverEquipBusinessPolicyResult(ReceiveDeliverDTO dto);


    /**
     * vin启动充电
     * 平台 <-- 华为
     *
     * insert_start_charge
     *
     * @param dto
     * @return
     * @throws Exception
     */
    Map<String, String> vinStartCharge(VinStartChargeDTO dto) throws Exception;


    /**
     * 平台充电设备编码同步 (相当于pushStationInfo)
     * 平台 --> 华为
     *
     * notification_operation_system_info
     *
     * @param dto
     * @return
     */
    String notificationOperationSystemInfo(PushStationInfoDTO dto);
}
