namespace SHH.CameraSdk;

/// <summary>
/// [改道分发中心] 全局管道路由器
/// 职责：驱动层只管把数据扔到这里，不用关心后面是缩放、增强还是直接分发。
/// </summary>
public static class GlobalPipelineRouter
{
    // 当前激活的处理器 (默认可为空，为空则直接透传)
    private static IFrameProcessor? _currentProcessor;

    /// <summary>
    /// 配置具体的处理策略 (在 Program.cs 中初始化)
    /// </summary>
    public static void SetProcessor(IFrameProcessor processor)
    {
        _currentProcessor = processor;
    }

    /// <summary>
    /// [驱动层入口] 提交帧数据
    /// </summary>
    public static void Enqueue(long deviceId, SmartFrame frame, FrameDecision decision)
    {
        // Optimized: [原因] 撤回冗余的 AddRef。实测发现 ProcessingPipeline.TrySubmit 
        // 内部已包含 AddRef 逻辑，此处若再加会导致引用计数无法归零，进而撑爆帧池导致卡死。
        if (_currentProcessor != null)
        {
            // 场景 A: 有处理器 (如缩放服务) -> 改道进入处理器
            _currentProcessor.Enqueue(deviceId, frame, decision);
        }
        else
        {
            // 场景 B: 无处理器 -> 直接进入全局分发中心 (回退到原始逻辑)
            GlobalProcessingCenter.Submit(deviceId, frame, decision);
        }
    }
}