"""
错误识别提示词构建器
用于将输入文本与模板组合为完整提示词。
"""

from pathlib import Path
from typing import Optional
import yaml


class WordsPromptBuilder:
    """根据错误识别模板构建提示词"""

    def __init__(self, template_path: Optional[str] = None):
        """
        初始化提示词构建器

        Args:
            template_path: 模板文件路径，默认使用 words_detect/错误识别.yaml
        """
        if template_path is None:
            template_path = Path(__file__).parent.parent / "错误识别.yaml"

        with open(template_path, "r", encoding="utf-8") as f:
            self.template = yaml.safe_load(f)

    def build_prompt(self, content: str) -> str:
        """
        构建完整提示词

        Args:
            content: 待检查的文本块

        Returns:
            拼装后的提示词文本
        """
        content = content.strip()

        # 1) 错误类别定义
        prompt_parts = []
        standards = self.template.get("classification_standards", {})
        if standards:
            prompt_parts.append("【错误类别定义】")
            for name, desc in standards.items():
                prompt_parts.append(f"{name}: {desc}")
            prompt_parts.append("")

        # 2) 待检查文本
        file_toc_tpl = self.template.get("file_toc", "")
        if "<content>" in file_toc_tpl:
            file_toc = file_toc_tpl.replace("<content>", content)
        else:
            file_toc = f"{file_toc_tpl.strip()}\n{content}"
        prompt_parts.append(file_toc.strip())
        prompt_parts.append("")

        # 3) 检查标准
        review_standard = self.template.get("review_standard", "")
        if review_standard:
            prompt_parts.append(review_standard.strip())
            prompt_parts.append("")

        # 4) 检查要求
        review_requirements = self.template.get("review_requirements", "")
        if review_requirements:
            prompt_parts.append(review_requirements.strip())
            prompt_parts.append("")

        # 5) 输出格式
        output_format = self.template.get("output_format", "")
        if output_format:
            prompt_parts.append(output_format.strip())

        return "\n".join(prompt_parts)

