package net.northking.cctp.se.device.service;

import net.northking.cctp.element.core.DeviceDriver;
import net.northking.cctp.se.device.bean.DeviceInfo;
import net.northking.cctp.se.device.bean.DevicePerInfo;

import java.util.Map;

public interface DeviceConnection {
    /**
     * 获取设备ID
     * @return
     */
    String getDeviceId();

    /**
     * 获取devicetoken
     * @return
     */
    String getDeviceToken();
    /**
     * 获取设备驱动
     * @return
     */
    DeviceDriver getDeviceDriver();
    /**
     * 获取关联设备信息
     * @return
     */
    DeviceInfo getDeviceInfo();

    /**
     * 销毁连接
     */
    void close();
    /**
     * 响应设备初始化事件
     * @param config
     */
    void initConfig(Map<String,Object> config);
    /**
     * 启动录屏
     */
    void startRecord();
    /**
     * 停止录屏
     * @return 录屏文件地址或文件服务器文件ID
     */
    String stopRecord(Map<String, Object> initData);
    /**
     * 启动日志采集
     */
    void startLog();
    /**
     * 停止日志采集
     * @return 日志文件地址或文件服务器文件ID
     */
    String stopLog();
    /**
     * 截取屏幕操作
     * @return 截图文件地址
     * @param initData
     */
    String snapshot(Map<String, Object> initData);

    /**
     * 截全屏
     * @param userToken  用戶token，截圖時上傳到文件服務器需要
     * @return
     */
    String snapshotAllScreen(String userToken, String taskId);

    /**
     * 重启
     * @param config 参数
     */
    void restart(Map<String, Object> config);

    /**
     * 停止回放
     * @param config 参数
     */
    void stopPlay(Map<String, Object> config);

    /**
     * 重新连接driver
     */
    boolean reconnect();

    /**
     * 记录设备性能
     * @param params
     */
    void recordDevicePer(Map<String, Object> params);


    /**
     * 停止记录设备性能
     * @return
     */
    DevicePerInfo stopRecordDevicePer();
}
