"""建树模块配置。"""

from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class TreeConfig:
    """建树配置参数，字段对齐 config/default.yaml 的 tree: 段。

    参数:
        l1_segment_duration: L1 段时长（秒）。
        l2_clip_duration: L2 clip 时长（秒）。
        l3_fps: L3 帧提取频率（帧/秒）。
        l2_representative_frames: L2 VLM 描述用的代表帧数。
        cache_dir: 树索引缓存目录。
        concurrency: asyncio Semaphore 上限。
        subtitle_inject: 建树时是否注入 SRT 字幕。
        srt_window_sec: 字幕匹配时间窗口（前后各 N 秒）。
    """

    l1_segment_duration: float = 600.0
    l2_clip_duration: float = 60.0
    l3_fps: float = 0.5
    l2_representative_frames: int = 6
    cache_dir: str = "cache/trees"
    concurrency: int = 16
    subtitle_inject: bool = True
    srt_window_sec: float = 5.0

    @classmethod
    def from_dict(cls, d: dict) -> TreeConfig:
        """从 YAML 解析后的 dict 构造，忽略未知字段。

        参数:
            d: 配置字典。

        返回:
            TreeConfig 实例。
        """
        return cls(**{k: v for k, v in d.items() if k in cls.__dataclass_fields__})
