using SHH.Contracts;

namespace SHH.MjpegPlayer
{
    /// <summary>
    /// 设备状态处理器
    /// 职责：监听消息总线发出的状态主题事件，负责将远程节点上报的相机在线/离线状态实时同步至本地管理中心。
    /// 架构说明：此类实现了业务逻辑的彻底解耦，不涉及 gRpc 通讯细节，也不涉及复杂的配置下发逻辑。
    /// </summary>
    public class DeviceStatusHandler
    {
        #region 单例模式

        /// <summary>
        /// 获取设备状态处理器的全局单例实例。
        /// 由 GrpcServerManager 在系统启动时显式调用以完成初始化。
        /// </summary>
        public static DeviceStatusHandler Instance { get; } = new DeviceStatusHandler();

        /// <summary>
        /// 私有构造函数：在此处完成对消息总线事件的订阅。
        /// </summary>
        private DeviceStatusHandler()
        {
            // 订阅 MessageBus 的状态报告主题，当总线收到状态更新包时自动触发 SyncToLocal
            MessageBus.Instance.OnDeviceStatusReport += SyncToLocal;
        }

        #endregion

        #region 核心业务逻辑

        /// <summary>
        /// 执行状态同步：将收到的 Payload 数据精确映射回本地 SDK 管理的摄像头集合中。
        /// </summary>
        /// <param name="items">包含 CameraId 和在线状态的业务载荷列表</param>
        private void SyncToLocal(List<StatusEventPayload> items)
        {
            // 1. 基础校验：若无数据则不执行后续逻辑
            if (items == null || items.Count == 0) return;

            // 2. 性能优化：将上报列表转换为字典，利用哈希查找提升大数据量下的匹配效率 (Key: CameraId 字符串)
            var stateMap = items.ToDictionary(k => k.CameraId, v => v);
        }

        #endregion
    }
}