package com.jsowell.thirdparty.yongchengboche.service;

import com.jsowell.pile.dto.*;
import com.jsowell.pile.thirdparty.CommonParamsDTO;
import com.jsowell.thirdparty.yongchengboche.dto.YCBCGetTokenDTO;

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

/**
 * 甬城泊车 Service
 *
 * @author Lemon
 * @Date 2023/10/30 15:44:09
 */
public interface YCBCService {
    /**
     * 获取令牌
     * @param dto
     * @return
     */
    public String YCBCGetToken(YCBCGetTokenDTO dto);

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 推送充电站信息
     * @param dto
     * @return
     */
    String pushStationInfo(PushStationInfoDTO dto);

    String pushStationInfoV2(PushStationInfoDTO dto);
}