package com.pwt.web.service;

import com.pwt.cloud.domin.CloudBattery;
import com.pwt.cloud.domin.CurrentAccountInfo;
import com.pwt.cloud.domin.Device;
import com.pwt.cloud.params.ChangeFinishParam;
import com.pwt.cloud.params.ChargeFinishParam;
import com.pwt.netty.BusinessException;

import java.util.List;
import java.util.Map;

/**
 * 云平台对接接口
 *
 * @author hanshuangxi
 * @date 2023/8/22 9:13
 */
public interface ICloudService {

    /**
     * 获取云平台token
     */
    void getToken() throws BusinessException;

    /**
     * 当前账号信息
     *
     * @return 当前账号信息
     */
    CurrentAccountInfo getCurrentAccountInfo() throws BusinessException;

    /**
     * 电站设备列表
     *
     * @return 电站信息
     * @throws BusinessException 异常
     */
    List<Device> deviceList() throws BusinessException;

    /**
     * 电站电池列表
     *
     * @return 电池列表
     * @throws BusinessException 异常
     */
    List<CloudBattery> batteryList() throws BusinessException;

    /**
     * 车辆换电开始
     *
     * @param vehicleCode 车辆编号
     * @param deviceCode  设备编号【换电机器人编号】
     * @return 电池列表
     * @throws BusinessException 异常
     */
    List<CloudBattery> changeStart(String vehicleCode, String deviceCode) throws BusinessException;

    /**
     * 车辆换电完成
     *
     * @param changeFinishParam 云平台换电完成接口传入参数
     * @throws BusinessException 异常
     */
    void changeFinish(ChangeFinishParam changeFinishParam) throws BusinessException;

    /**
     * 车辆充电开始
     *
     * @param vehicleCode 车辆编号
     * @param deviceCode  设备编号【充电桩编号】
     * @throws BusinessException 异常
     */
    void chargeStart(String vehicleCode, String deviceCode) throws BusinessException;

    /**
     * 车辆充电完成
     *
     * @param chargeFinishParam 云平台充电完成接口传入参数
     * @throws BusinessException 异常
     */
    void chargeFinish(ChargeFinishParam changeFinishParam) throws BusinessException;

    /**
     * 机组充电开始
     *
     * @param batteryCode 电池编号
     * @param deviceCode  设备编号【充电机组编号】
     * @throws BusinessException 异常
     */
    void powerStart(String batteryCode, String deviceCode) throws BusinessException;

    /**
     * 机组充电完成
     *
     * @param batteryCode 电池编号
     * @param deviceCode  设备编号【充电机组编号】
     * @param level       充电电量
     * @throws BusinessException 异常
     */
    void powerFinish(String batteryCode, String deviceCode, double level) throws BusinessException;

    /**
     * 电站告警开始
     *
     * @param deviceCode 设备编号
     * @param faultCode  故障代码
     * @param grade      故障等级【1、2、3、4、5、……】
     * @throws BusinessException 异常
     */
    void alarmStart(String deviceCode, String faultCode, String grade) throws BusinessException;

    /**
     * 电站告警完成
     *
     * @param deviceCode 设备编号
     * @param faultCode  故障代码
     * @throws BusinessException 异常
     */
    void alarmFinish(String deviceCode, String faultCode) throws BusinessException;

    /**
     * 电站开关状态
     *
     * @param status enable 或 disable
     * @throws BusinessException 异常
     */
    void stationStatus(String status) throws BusinessException;

    /**
     * 电站排队数量
     *
     * @param wait 0，1，2，3+ 排队数量
     * @throws BusinessException 异常
     */
    void stationWait(String wait) throws BusinessException;

    /**
     * 电站设备度量
     *
     * @param code 设备编号
     * @param maps 设备参数（数组）
     * @throws BusinessException 异常
     */
    void deviceMeasure(String code, Map<String, Object>[] maps) throws BusinessException;

    /**
     * 车辆位置信息
     *
     * @param code     车辆编号
     * @param location 车辆位置 经度,纬度、如："120.338723,31.914388"
     * @throws BusinessException 异常
     */
    void vehicleLocation(String code, String location) throws BusinessException;
}