using Microsoft.Extensions.DependencyInjection;

namespace SHH.CameraSdk
{
    public static class ServiceExtensions
    {
        /// <summary>
        /// 注入 CameraSdk 的核心服务
        /// <para>包含：内存缓存、配置管理、图像流水线、存储服务、相机管理、窗口管理等</para>
        /// </summary>
        /// <param name="services">DI 容器</param>
        /// <param name="processId">进程ID (用于确定存储路径)</param>
        /// <returns></returns>
        public static IServiceCollection AddCameraSdk(this IServiceCollection services, int processId)
        {
            // =============================================================
            // 1. 基础组件注册 (修复你之前的报错)
            // =============================================================
            services.AddMemoryCache(); // ★ 核心修复：添加内存缓存

            // 注册配置管理器（指挥部）
            services.AddSingleton<ProcessingConfigManager>();

            // =============================================================
            // 2. 图像处理流水线编排 (Pipeline) - 修复版
            // =============================================================

            // 1. 先注册下游节点 (Enhance)
            // 这样整个系统（包括 Controller 和 Scale）都共享这唯一的一个实例
            services.AddSingleton<ImageEnhanceCluster>(sp =>
            {
                var configMgr = sp.GetRequiredService<ProcessingConfigManager>();
                return new ImageEnhanceCluster(4, configMgr);
            });

            // 2. 再注册上游节点 (Scale) 并完成组装
            services.AddSingleton<ImageScaleCluster>(sp =>
            {
                var configMgr = sp.GetRequiredService<ProcessingConfigManager>();

                // 创建 Scale 实例
                var scale = new ImageScaleCluster(4, configMgr);

                // ★ 关键修复：从容器中获取已经在上面注册好的 Enhance 实例
                // 而不是 new 一个新的
                var enhance = sp.GetRequiredService<ImageEnhanceCluster>();

                // ★ 编排流水线：缩放 -> 增亮 (现在引用的是同一个对象了)
                scale.SetNext(enhance);

                // ★ 全局路由挂载
                GlobalPipelineRouter.SetProcessor(scale);

                return scale;
            });

            // =============================================================
            // 3. 核心业务服务
            // =============================================================

            // 核心设备管理器 (自动注入 IStorageService)
            services.AddSingleton<CameraManager>();

            // 动态窗口管理器 (自动注入 CameraManager)
            services.AddSingleton<DisplayWindowManager>();

            // 网络哨兵 (建议注册为单例，方便后续获取状态)
            services.AddSingleton<ConnectivitySentinel>();

            // =============================================================
            // 4. Web 过滤器
            // =============================================================
            services.AddScoped<UserActionFilter>();

            return services;
        }
    }
}