import json
from pathlib import Path
from typing import Dict, Any
import copy


class ResponseBuilder:
    """响应构建器"""

    TEMPLATE_DIR = Path(__file__).parent.parent / "config" / "responses"

    @staticmethod
    def load_template(template_name: str) -> Dict:
        """加载 JSON 模板

        Args:
            template_name: 模板名称（不含.json扩展名）

        Returns:
            模板字典
        """
        file_path = ResponseBuilder.TEMPLATE_DIR / f"{template_name}.json"
        with open(file_path, 'r', encoding='utf-8') as f:
            return json.load(f)

    @staticmethod
    def replace_placeholders(template: Dict, **kwargs) -> Dict:
        """递归替换占位符

        Args:
            template: 模板字典
            **kwargs: 占位符键值对

        Returns:
            替换后的字典
        """
        def replace_value(value):
            if isinstance(value, str):
                result = value
                for key, val in kwargs.items():
                    placeholder = f"{{{key}}}"
                    if placeholder in result:
                        result = result.replace(placeholder, str(val))
                return result
            elif isinstance(value, dict):
                return {k: replace_value(v) for k, v in value.items()}
            elif isinstance(value, list):
                return [replace_value(item) for item in value]
            return value

        # 深拷贝模板，避免修改原始数据
        return replace_value(copy.deepcopy(template))

    @staticmethod
    def build_success_response(template_name: str, **kwargs) -> Dict:
        """构建成功响应

        Args:
            template_name: 模板名称
            **kwargs: 占位符键值对

        Returns:
            响应字典
        """
        template = ResponseBuilder.load_template(template_name)
        return ResponseBuilder.replace_placeholders(
            template["success_response"],
            **kwargs
        )
