package com.jsowell.thirdparty.lianlian.service;

import com.jsowell.pile.dto.*;
import com.jsowell.thirdparty.lianlian.domain.StationStatsInfo;
import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO;
import com.jsowell.thirdparty.lianlian.vo.*;

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

public interface LianLianService {

	/**
	 * 根据运营商id，推送运营商信息
	 * @param merchantId
	 */
	void pushMerchantInfo(Long merchantId);

	/**
	 * 根据充电站id，推送充电站信息
	 * @param dto
	 */
	String pushStationInfo(LianLianPushStationInfoDTO dto);

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

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


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


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

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

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

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

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

	/**
	 * 推送联联平台 设备状态变化推送
	 * @param pileConnectorCode
	 * @param status
	 * @return
	 */
	String pushConnectorStatus(String pileConnectorCode, String status);

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

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

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

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

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

	/**
	 * 推送订单结算信息 (联联推给我们)
	 * @param dto
	 * @return
	 */
	Map<String, String> pushOrderSettlementInfo(PushOrderSettlementDTO dto);

	/**
	 * 查询订单结算信息
	 * @param orderCode
	 * @return
	 */
	String queryOrderSettlementInfo(String orderCode);

	/**
	 * 推送订单对账结果信息
	 * @param orderCode
	 * @return
	 */
	String pushOrderReconciliationInfo(String orderCode);

	/**
	 * 设备充电中状态变化推送
	 * @param orderCode
	 * @return
	 */
	String pushPileChargeStatusChange(String orderCode);

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

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