package com.jsowell.thirdparty.nanrui.service;

import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.pile.domain.nanrui.NROrderInfo;
import com.jsowell.pile.dto.PushStationInfoDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.dto.nanrui.NRQueryOrderDTO;
import com.jsowell.pile.dto.nanrui.PushAlarmInfoDTO;
import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO;
import com.jsowell.thirdparty.nanrui.domain.NRStationStatusInfo;

import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * 南瑞Service
 *
 * @author Lemon
 * @Date 2023/9/26 9:17
 */
public interface NRService {

    /**
     * 从南瑞平台获取令牌
     * @param
     * @return
     */
    public String getToken(String urlAddress, String operatorId, String operatorSecret,
                           String dataSecretIv, String signSecret, String dataSecret);

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

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

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


    /**
     * 获取充电站信息
     * @param dto
     * @return
     */
    Map<String, String> query_stations_info(QueryStationInfoDTO dto);

    /**
     * 推送告警信息
     * 当充电接口发生异常告警或故障时，运营商企业平台应立即主动推送信息到省、市两级监管平台
     * @param dto
     * @return
     */
    String pushAlarmInfo(PushAlarmInfoDTO dto);


    /**
     * 设备状态变化推送
     * 当充电枪由 闲置 转为 充电 等状态发生变化时，运营商平台应立即推送当前状态到省、市两级监管平台。
     * 充电过程中运营商平台应 每分钟 上报充电包含电流、电压在内的监测数据。
     */
    String pushPileStatus(RealTimeMonitorData realTimeMonitorData);


    /**
     * 查询设备接口状态
     * 此接口用于批量查询设备实时状态
     * 由充电运营商方实现此接口，省、市两级监管平台调用。
     * @param dto
     * @return
     */
    Map<String, String> query_station_status(QueryStationInfoDTO dto);


    /**
     * 充电电量信息推送
     * 当运营商平台完成一次充电时，将充电电量信息推送至省、市两级监管平台
     * @param orderCode
     * @return
     */
    String pushOrderInfo(String orderCode);

    /**
     * 查询充电电量信息
     * 此接口用于批量查询时间区段内交易记录
     * @param dto
     * @return
     */
    Map<String, String> query_order_info(NRQueryOrderDTO dto);
}