package com.usky.sas.service;

import com.usky.common.core.bean.CommonPage;
import com.usky.common.mybatis.core.CrudService;
import com.usky.sas.domain.SasDevice;
import com.usky.sas.service.vo.*;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

/**
 * 设备信息 服务接口
 */
public interface SasDeviceService extends CrudService<SasDevice> {

    CommonPage<DeviceHeartbeatResponse> heartbeatPage(DeviceHeartbeatRequest request);

    CommonPage<DeviceConfigVO> configPage(DeviceConfigPageRequest request);

    String createConfig(DeviceConfigSaveRequest request);

    void updateConfig(String id, DeviceConfigSaveRequest request);

    void deleteConfig(String id);

    /** 批量删除设备配置 */
    void deleteConfigBatch(List<String> ids);

    /** 获取设备详情（含类型名称、报警组名称、视频组名称） */
    DeviceDetailVO getDetail(String id);

    /** 单个设备设置报警联动组 */
    void setAlarmGroup(String id, String alarmGroupType);

    /** 批量设置报警联动组 */
    void setAlarmGroupBatch(List<String> ids, String alarmGroupType);

    /** 单个设备设置视频监控组 */
    void setVideoGroup(String id, String videoGroupType);

    /** 批量设置视频监控组 */
    void setVideoGroupBatch(List<String> ids, String videoGroupType);

    /** 获取未绑定 IPC 的设备列表（设备类型=视频） */
    List<DeviceIPCItemVO> getNotBindIPCList();

    /** 绑定 IPC 设备 */
    void bindingIPC(String id, String ipcId);

    /** 解绑 IPC 设备 */
    void unbindIPC(String id);

    /**
     * 从 AG（Agbox）同步设备到 sas_device。
     * 按系统类型调用 AG getDeviceList，若有通道则按通道落库，否则按设备落库一条。
     */
    void syncAgboxDevice();

    /** 通过 Excel 批量导入设备 */
    String importDeviceByExcel(MultipartFile file);

    /** 批量新增设备（按 channels 生成多条记录） */
    void addDeviceBatch(DeviceBatchAddRequest request);

    /**
     * 扫描网络，获取周边设备列表。
     *
     * @param second 扫描时长（秒）
     * @param code   协议类型：1-ONVIF，2-海康，3-大华 等
     */
    List<SearchDeviceInfoVO> unitySearchDevice(Integer second, Integer code);

    /**
     * 统一扫描添加设备：根据前端选择的扫描结果和协议类型，批量生成 sas_device 记录。
     */
    List<String> unityAddSearchDevice(UnityAddSearchDeviceRequest request);

    /** 视频协议下拉列表 */
    List<DeviceProtocolOptionVO> getProtocolCodes();

    /** 视频设备类型下拉列表 */
    List<DeviceVideoTypeOptionVO> getVideoTypeCodes();

    /**
     * 海康设备修改 IP 地址
     */
    void updateHikDeviceIp(UpdateDeviceIpAddrRequest request);
}

