using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TeamAAS_VP.Core.Lights;
using TeamAAS_VP.Models;
using TeamAAS_VP.Models.Lights;
namespace TeamAAS_VP.Interfaces
{
///
/// 管理整套灯控器与全局通道的服务接口。
/// 提供控制器注册/注销、全局通道亮度与开关操作、连接管理以及配置持久化等功能。
///
public interface ILightManagerService
{
///
/// 当新的灯控制器被注册并添加到管理器时触发。
/// 事件参数包含被添加的控制器信息与对应 Id。
///
event EventHandler ControllerAdded;
///
/// 当已有的灯控制器被从管理器中移除时触发。
/// 事件参数包含被移除的控制器信息与对应 Id。
///
event EventHandler ControllerRemoved;
///
/// 当任意全局通道的状态(例如亮度或开关状态)发生变化时触发。
/// 事件参数包含受影响的通道信息与新状态。
///
event EventHandler ChannelStatusChanged;
///
/// 当前已注册的控制器集合(只读)。
/// 键为控制器 Id,值为对应的 实例。
///
IReadOnlyDictionary Controllers { get; }
///
/// 全局通道集合(只读)。
/// 键为全局通道 Id,值为对应的 实例。
///
IReadOnlyDictionary GlobalChannels { get; }
///
/// 异步注册并初始化一个新的灯控制器。
///
/// 要注册的控制器 Id,必须唯一。
/// 该控制器的配置数据。
///
/// 返回已注册并初始化的 实例。
/// 如果注册失败,返回的任务可能抛出异常或返回 null(由具体实现决定)。
///
Task RegisterControllerAsync(int id, LightControllerConfig configuration);
///
/// 异步注销并移除指定 Id 的控制器。
///
/// 要注销的控制器 Id。
/// 操作成功返回 true;如果找不到控制器或注销失败则返回 false。
Task UnregisterControllerAsync(int controllerId);
///
/// 为指定的全局通道设置亮度值。
///
/// 目标全局通道 Id。
/// 亮度值,通常在 0 到 100 范围内(具体范围请参照实现)。
/// 操作成功返回 true,否则返回 false。
Task SetGlobalChannelBrightnessAsync(int globalChannelId, int brightness);
///
/// 获取指定全局通道的亮度值。
///
/// 目标全局通道 Id。
/// 亮度值,通常在 0 到 100 范围内(具体范围请参照实现)。
/// 操作成功返回 true,否则返回 false。
Task GetGlobalChannelBrightnessAsync(int globalChannelId);
///
/// 打开指定的全局通道(将其置于开启状态)。
///
/// 目标全局通道 Id。
/// 操作成功返回 true,否则返回 false。
Task TurnOnGlobalChannelAsync(int globalChannelId);
///
/// 关闭指定的全局通道(将其置于关闭状态)。
///
/// 目标全局通道 Id。
/// 操作成功返回 true,否则返回 false。
Task TurnOffGlobalChannelAsync(int globalChannelId);
///
/// 尝试连接所有已注册的控制器并建立通信通道。
///
/// 所有连接成功则返回 true;若有失败则返回 false(或由实现抛出异常以提供详细错误)。
Task ConnectAllAsync();
///
/// 断开所有已连接的控制器并释放相关资源。
///
/// 所有断开成功则返回 true;若有失败则返回 false(或由实现抛出异常以提供详细错误)。returns>
Task DisconnectAllAsync();
///
/// 将当前管理器的配置(包括控制器和全局通道映射)保存到指定文件路径。
///
/// 目标文件路径,支持绝对或相对路径。
/// 完成保存操作的任务。实现可能在 I/O 错误时抛出异常。
Task SaveConfigurationAsync(string filePath);
///
/// 从指定文件路径加载管理器配置并应用到当前实例。
///
/// 包含配置的文件路径。
/// 完成加载操作的任务。实现可能在文件不存在或格式不正确时抛出异常。
Task LoadConfigurationAsync(string filePath);
}
}