package com.kym.service.awoara;

import com.kym.entity.DeviceConfig;
import com.kym.entity.awoara.ApiList;
import com.kym.entity.awoara.MethodHelp;
import com.kym.entity.awoara.OrderInfo;
import com.kym.entity.awoara.response.CreateOrder;
import com.kym.entity.awoara.response.HardwareInfo;
import com.kym.entity.awoara.response.State;

/**
 * @author skyline
 * 石斑鱼洗车主板API接口
 * 2023/8/7 15:06
 */
public interface AwoaraService {

    /**
     * 获取API列表
     *
     * @return
     */
    ApiList help(String productKey, String deviceName);


    /**
     * 获取API帮助信息
     *
     * @param productKey
     * @param deviceName
     * @param method
     * @return
     * @throws Exception
     */
    MethodHelp methodHelp(String productKey, String deviceName, String method);


    /**
     * 显⽰消息对话框
     * 意：系统只能显⽰⼀个对话框，新的对话框会把旧的覆盖掉
     * title 参考数据定义中的设备状态。
     * content 参考数据定义中的订单信息(只有在洗⻋状态state=busy才会传回来)。
     * seconds 显⽰时⻓，单位秒，时间到了对话框⾃动消失
     *
     * @param productKey
     * @param deviceName
     * @param title
     * @param content
     * @param seconds
     * @return
     */
    void showMsgbox(String productKey, String deviceName, String title, String content, int seconds);

    /**
     * 隐藏消息对话框
     *
     * @param productKey
     * @param deviceName
     * @return
     */
    void hideMsgbox(String productKey, String deviceName);


    /**
     * 重启设备
     * 注意:在洗⻋的时候或者账单明细⻚⾯，设备不会重启(在等待重启)，重启前由3-5秒左右的延时(防⽌⽹络数据没有发送完成)。
     *
     * @param productKey
     * @param deviceName
     * @return
     */
    void reboot(String productKey, String deviceName);


    /**
     * 查询设备状态
     *
     * @param productKey
     * @param deviceName
     * @return
     */
    State queryState(String productKey, String deviceName);


    /**
     * 查询硬件信息
     *
     * @param productKey
     * @param deviceName
     * @return
     */
    HardwareInfo queryHardwareInfo(String productKey, String deviceName);

    /**
     * 创建订单
     * order_id 订单号，字符串类型，必须。
     * member_name 会员名称，字符串类型，可选。
     * member_balance 会员余额(单位分，仅在界⾯上显⽰，不参与任何业务处理)，可选。
     * member_discount 会员折扣比例(95表⽰9.5折优惠，默认100表⽰没有优惠)，可选。
     * prepay_money 预付⾦额(本次开机最⼤消费⾦额)，单位分，必须。
     * card_sn 刷卡的串号(对于刷普通卡的⽤户，服务器端应当在收到刷卡消息的时候查询这张卡绑定的账号
     * 信息，如果这个账号有余额，那么推送开机命令的时候需要把上传的刷卡事件中的card_sn回传回去，
     * 这样板⼦会把这个开机命令标记为刷卡开机，否则会标记为⽹络开机。)
     *
     * @return
     */
    CreateOrder createOrder(String productKey, String deviceName, String orderId, String memberName, int memberBalance, int memberDiscount, int prepayMoney);

    /**
     * 关闭订单
     *
     * @param productKey
     * @param deviceName
     * @param orderId
     * @param forceClose
     * @return
     */
    void closeOrder(String productKey, String deviceName, String orderId);

    void forceCloseOrder(String productKey, String deviceName);

    /**
     * 查询订单
     * 注意：只能查询当前订单和上⼀个订单的信息,2G版本重启后不能查询之前的订单信息。
     *
     * @param productKey
     * @param deviceName
     * @param orderId
     * @return
     */
    OrderInfo queryOrder(String productKey, String deviceName, String orderId);

    /**
     * 读取配置
     *
     * @param productKey
     * @param deviceName
     * @return
     */
    DeviceConfig readConfig(String productKey, String deviceName);

    /**
     * 修改配置
     *
     * @param productKey
     * @param deviceName
     * @param config
     * @return
     */
    void writeConfig(String productKey, String deviceName, DeviceConfig config);
}
