using System.Text.Json.Nodes;
using OpenAuth.WebApi.CloudSdk;
namespace OpenAuth.App.ServiceApp.DjiCloud.Service;
///
/// 设备服务接口,定义了设备管理相关的操作。
///
public interface IDeviceService
{
///
/// 飞行器离线。
///
/// 飞行器序列号
void SubDeviceOffline(string deviceSn);
///
/// 网关离线。
///
/// 网关序列号
void GatewayOffline(string gatewaySn);
///
/// 当网关上线时订阅网关主题,并取消订阅子设备主题。
///
/// 网关管理对象
void GatewayOnlineSubscribeTopic(GatewayManager gateway);
///
/// 当无人机上线时订阅网关和子设备主题。
///
/// 网关管理对象
void SubDeviceOnlineSubscribeTopic(GatewayManager gateway);
///
/// 当网关设备下线时,取消订阅网关和子设备的主题。
///
/// 网关管理对象
void OfflineUnsubscribeTopic(GatewayManager gateway);
///
/// 根据不同查询条件获取设备数据。
///
/// 查询参数
/// 设备列表
// List GetDevicesByParams(DeviceQueryParam param);
///
/// 获取该工作区所有设备的拓扑信息。
///
/// 工作区 ID
/// 设备列表
List GetDevicesTopoForWeb(string workspaceId);
///
/// 设置无人机的遥控器和负载信息。
///
/// 设备对象
void SpliceDeviceTopo(DeviceDTO device);
///
/// 根据设备 SN 查询设备信息。
///
/// 设备序列号
/// 拓扑设备 DTO
// Optional GetDeviceTopoForPilot(string sn);
///
/// 将单个设备信息转换为拓扑对象。
///
/// 设备对象
/// 拓扑设备 DTO
// TopologyDeviceDTO DeviceConvertToTopologyDTO(DeviceDTO device);
///
/// 服务器接收到同一工作区内的任何设备上下线及拓扑更新请求时,
/// 会通过 WebSocket 向 PILOT 广播推送设备上下线及拓扑更新消息,
/// PILOT 收到推送后重新获取设备拓扑列表。
///
/// 工作区 ID
/// 设备序列号
void PushDeviceOfflineTopo(string workspaceId, string deviceSn);
///
/// 服务器接收到同一工作区内的任何设备上下线及拓扑更新请求时,
/// 会通过 WebSocket 向 PILOT 广播推送设备上下线及拓扑更新消息,
/// PILOT 收到推送后重新获取设备拓扑列表。
///
/// 工作区 ID
/// 网关序列号
/// 设备序列号
void PushDeviceOnlineTopo(string workspaceId, string gatewaySn, string deviceSn);
///
/// 更新设备信息。
///
/// 设备 DTO
/// 是否更新成功
bool UpdateDevice(DeviceDTO deviceDTO);
///
/// 绑定设备到组织和人员。
///
/// 设备 DTO
/// 是否绑定成功
bool BindDevice(DeviceDTO device);
///
/// 获取工作区内已绑定设备列表。
///
/// 工作区 ID
/// 页码
/// 每页大小
/// 域
/// 分页设备数据
// PaginationData GetBoundDevicesWithDomain(string workspaceId, long page, long pageSize, int domain);
///
/// 解除设备绑定。
///
/// 设备序列号
void UnbindDevice(string deviceSn);
///
/// 根据设备序列号获取设备信息。
///
/// 设备序列号
/// 设备 DTO
// Optional GetDeviceBySn(string sn);
///
/// 创建设备固件升级任务。
///
/// 工作区 ID
/// 升级 DTO 列表
/// HTTP 响应结果
// HttpResultResponse CreateDeviceOtaJob(string workspaceId, List upgradeDTOS);
///
/// 设置无人机属性参数。
///
/// 工作区 ID
/// 停机坞序列号
/// JSON 参数节点
/// 受影响记录数
int DevicePropertySet(string workspaceId, string dockSn, JsonNode param);
///
/// 检查停机坞的工作模式。
///
/// 停机坞序列号
/// 停机坞工作模式枚举
// DockModeCodeEnum GetDockMode(string dockSn);
///
/// 查询飞行器的工作模式。
///
/// 设备序列号
/// 飞行器工作模式枚举
// DroneModeCodeEnum GetDeviceMode(string deviceSn);
///
/// 检查停机坞是否处于 DRC 模式。
///
/// 停机坞序列号
/// 是否处于 DRC 模式
bool CheckDockDrcMode(string dockSn);
///
/// 检查设备是否有飞行控制权限。
///
/// 网关序列号
/// 是否有飞行控制权限
bool CheckAuthorityFlight(string gatewaySn);
///
/// 保存设备信息。
///
/// 设备 DTO
/// 受影响记录数
int SaveDevice(DeviceDTO device);
///
/// 保存或更新设备信息。
///
/// 设备 DTO
/// 是否保存或更新成功
bool SaveOrUpdateDevice(DeviceDTO device);
///
/// 推送 OSD 数据给 Pilot。
///
/// 工作区 ID
/// 设备序列号
/// OSD 数据
// void PushOsdDataToPilot(string workspaceId, string sn, DeviceOsdHost data);
///
/// 推送 OSD 数据给 Web。
///
/// 工作区 ID
/// 业务代码枚举
/// 设备序列号
/// OSD 数据
// void PushOsdDataToWeb(string workspaceId, BizCodeEnum codeEnum, string sn, object data);
///
/// 更新飞行控制信息。
///
/// 网关设备 DTO
/// 控制源枚举
//void UpdateFlightControl(DeviceDTO gateway, ControlSourceEnum controlSource);
}