# -*- coding: utf-8 -*-
"""智能体初始化模板路由。

服务端作为智能体初始化 md 模板的唯一来源（qa 模板已统一为 PineAgents 品牌），
本地在初始化前把整棵树拉到本地缓存。模板以目录 md 存储、经接口暴露，后续可换 JSON/DB。
"""
from __future__ import annotations

from pathlib import Path

from fastapi import APIRouter, Depends

from ... import config
from ..dependencies import get_current_user

router = APIRouter(prefix="/agent-templates", tags=["agent-templates"])

# 模板类型 → 目录名映射（"common" 即 TEMPLATES_DIR 根下的语言目录）。
_TEMPLATE_TYPES = ("common", "qa", "local")


def _read_type_dir(base: Path, type_name: str) -> dict[str, dict[str, str]]:
    root = base if type_name == "common" else base / type_name
    langs: dict[str, dict[str, str]] = {}
    if not root.is_dir():
        return langs
    for lang_dir in sorted(p for p in root.iterdir() if p.is_dir()):
        files = {
            md.name: md.read_text(encoding="utf-8")
            for md in sorted(lang_dir.glob("*.md"))
        }
        if files:
            langs[lang_dir.name] = files
    return langs


@router.get("", summary="智能体初始化模板树", response_model=dict)
async def get_agent_templates(
    _user: dict = Depends(get_current_user),
):
    """返回全部初始化模板：

    ``{template_type: {language: {filename: content}}}`` + 顶层 ``fixed_soul``
    （服务端托管、不可变、最高优先级的 SOUL 片段）。
    """
    base = config.TEMPLATES_DIR
    tree = {
        type_name: _read_type_dir(base, type_name)
        for type_name in _TEMPLATE_TYPES
    }
    tree["fixed_soul"] = _read_lang_files(base / "fixed_soul")
    return tree


def _read_lang_files(root: Path) -> dict[str, str]:
    """读取 ``<root>/<lang>.md`` → ``{lang: content}``。"""
    files: dict[str, str] = {}
    if not root.is_dir():
        return files
    for md in sorted(root.glob("*.md")):
        files[md.stem] = md.read_text(encoding="utf-8")
    return files
