package com.ruoyi.bst.device.service;

import java.util.Collections;
import java.util.List;

import com.ruoyi.bst.device.domain.DeviceVO;

public interface DeviceIotService {

    /**
     * 开锁
     * @param device 设备
     * @param isAdmin 是否管理员操作
     * @param reason 原因
     * @return 结果
     */
    int unlock(DeviceVO device, boolean isAdmin, String reason, boolean requiredIot);

    /**
     * 锁车
     * @param device 设备
     * @param isAdmin 是否管理员操作
     * @param reason 原因
     * @param requiredIot 是否IOT操作必须成功
     * @return 结果
     */
    int lock(DeviceVO device, boolean isAdmin, String reason, boolean requiredIot);

    /**
     * 强制断电
     * @param device 设备
     * @param isAdmin 是否管理员操作
     * @param reason 原因
     * @param requiredIot 是否IOT操作必须成功
     * @return 结果
     */
    int qLock(DeviceVO device, boolean isAdmin, String reason, boolean requiredIot);

    /**
     * 播放语音
     * @param device 设备
     * @param type 语音类型
     * @param reason 原因
     * @return 结果
     */
    boolean play(DeviceVO device, String type, String reason);

    /** 
     * 重启
     * @param device 设备
     * @param reason 原因
     * @return 结果
     */
    boolean reboot(DeviceVO device, String reason);

    /**
     * 开坐垫锁
     * @param device 设备
     * @param reason 原因
     * @return 结果
     */
    boolean unlockSeat(DeviceVO device, String reason);

    /**
     * 刷新
     * @param device 设备
     * @param onlineType 在线类型
     * @return 结果
     */
    default void refresh(DeviceVO device, String onlineType) {
        refresh(Collections.singletonList(device), onlineType);
    }

    /**
     * 刷新
     * @param deviceList 设备列表
     * @param onlineType 在线类型
     * @return 结果
     */
    void refresh(List<DeviceVO> deviceList, String onlineType);

    /**
     * 创建OneNet设备
     * @param mac 设备mac地址
     */
    boolean create(String mac);

    /**
     * 锁车
     * @param id 设备ID
     * @param isAdmin 是否管理员操作
     * @param reason 原因
     * @param requiredIot 是否IOT操作必须成功
     * @return 结果
     */
    int lock(Long id, boolean isAdmin, String reason, boolean requiredIot);

    /**
     * 开锁
     * @param id 设备ID
     * @param isAdmin 是否管理员操作
     * @param reason 原因
     * @return 结果
     */
    int unlock(Long id, boolean isAdmin, String reason, boolean requiredIot);

    /**
     * 监控设备
     * @param ids 设备ID列表，若为空，则监控所有设备
     */
    void monitor(List<Long> ids);

}
