"""AI提示词管理模块"""

from typing import Dict, List, Optional


class AIPromptManager:
    """AI提示词管理工具
    
    功能：
    1. 管理和生成AI提示词
    2. 为不同任务生成特定的提示词
    3. 提供XML修改的标准提示词格式
    """
    
    def __init__(self):
        """初始化AI提示词管理器"""
        pass
    
    def get_xml_modification_prompt(self, context: Optional[str] = None) -> str:
        """获取XML修改的提示词
        
        Args:
            context: 可选的上下文信息
            
        Returns:
            str: XML修改提示词
        """
        prompt = """
你是XML编辑助手。
只输出JSON数组：
[
  {
    "xpath": "...",
    "value": "..."
  }
]
不要输出解释。
不要修改结构。
        """
        
        if context:
            prompt = f"{context}\n\n{prompt}"
        
        return prompt.strip()
    
    def get_content_generation_prompt(self, schema: Optional[Dict] = None, context: Optional[str] = None) -> str:
        """获取内容生成的提示词
        
        Args:
            schema: 可选的Schema定义
            context: 可选的上下文信息
            
        Returns:
            str: 内容生成提示词
        """
        prompt_parts = []
        
        if context:
            prompt_parts.append(context)
        
        prompt_parts.append("你是专业的内容生成助手，请根据以下要求生成高质量的内容：")
        
        if schema:
            prompt_parts.append("\n请按照以下结构生成内容：")
            properties = schema.get("properties", {})
            for field_name, field_info in properties.items():
                field_type = field_info.get("type", "string")
                description = field_info.get("description", field_name)
                prompt_parts.append(f"- {field_name}: {description} ({field_type})")
        
        prompt_parts.append("\n输出格式：")
        prompt_parts.append("请以JSON格式输出，键为字段名，值为生成的内容。")
        prompt_parts.append("例如：")
        prompt_parts.append('{"title": "2025年度报告", "summary": "这是一份年度报告"}')
        
        return "\n".join(prompt_parts)
    
    def get_schema_based_prompt(self, schema: Dict, task: str = "generation") -> str:
        """根据Schema生成提示词
        
        Args:
            schema: Schema定义
            task: 任务类型 ("generation" 或 "modification")
            
        Returns:
            str: Schema基础的提示词
        """
        if task == "generation":
            return self.get_content_generation_prompt(schema)
        elif task == "modification":
            return self.get_xml_modification_prompt()
        else:
            raise ValueError(f"不支持的任务类型: {task}")
    
    def get_full_pipeline_prompt(self, task_type: str, **kwargs) -> str:
        """获取完整流水线的提示词
        
        Args:
            task_type: 任务类型
            **kwargs: 额外参数
            
        Returns:
            str: 完整流水线提示词
        """
        prompt_map = {
            "content_generation": self.get_content_generation_prompt,
            "xml_modification": self.get_xml_modification_prompt,
            "schema_based": self.get_schema_based_prompt
        }
        
        if task_type not in prompt_map:
            raise ValueError(f"不支持的任务类型: {task_type}")
        
        return prompt_map[task_type](**kwargs)
