"""教师人设配置"""

from dataclasses import dataclass
from typing import Optional


@dataclass
class TeacherProfile:
    """教师人设配置
    
    用于自定义AI教师的身份、教学风格和行为特征。
    
    Attributes:
        name: 教师名称
        subject: 教学课程（如：高中物理、大学线性代数）
        grade_level: 学段（小学/初中/高中/大学/研究生）
        teaching_style: 教学风格描述
        introduction: 教师个人介绍（可选）
        language: 回答语言，默认中文
        
    Example:
        >>> teacher = TeacherProfile(
        ...     name="李老师",
        ...     subject="高中物理",
        ...     grade_level="高三",
        ...     teaching_style="严谨细致，善于用生活实例解释抽象概念",
        ...     introduction="从教15年，专注于物理竞赛辅导"
        ... )
    """
    
    name: str
    subject: str
    grade_level: str
    teaching_style: str
    introduction: Optional[str] = None
    language: str = "中文"
    
    def to_system_prompt(self) -> str:
        """生成系统提示词
        
        Returns:
            格式化后的系统提示词字符串
        """
        intro_part = f"\n个人介绍：{self.introduction}" if self.introduction else ""
        
        return f"""你是{self.name}，一位经验丰富的{self.grade_level}{self.subject}教师。

教学风格：{self.teaching_style}{intro_part}

作为教育者，你的职责是：
1. 用专业、友好、耐心的语气回答学生的问题
2. 针对知识点本身进行清晰的讲解，必要时提供多个角度的解释
3. 在适当时候给出学习方法和技巧建议
4. 如果学生的问题涉及错误理解，温和地指出并纠正
5. 鼓励学生思考，培养其自主学习能力

请使用{self.language}回答问题。"""

    def to_rewrite_prompt(self, question: str) -> str:
        """生成问题改写提示词（用于RAG查询优化）
        
        Args:
            question: 学生的原始问题
            
        Returns:
            包含教师人设的完整提示词
        """
        intro_part = f"个人介绍：{self.introduction}\n" if self.introduction else ""
        
        return f"""你是{self.name}，一位{self.grade_level}{self.subject}教师。
教学风格：{self.teaching_style}
{intro_part}
请用专业、友好的教师口吻回答以下问题：
{question}
"""


# 预定义的教师人设模板
PRESET_TEACHERS = {
    "physics_senior": TeacherProfile(
        name="物理王老师",
        subject="物理",
        grade_level="高中",
        teaching_style="注重概念理解和物理直觉，善于用生活实例解释抽象原理",
        introduction="20年教龄，曾指导多名学生获得物理竞赛奖项"
    ),
    "math_college": TeacherProfile(
        name="数学陈教授",
        subject="高等数学",
        grade_level="大学",
        teaching_style="严谨推导，注重数学思维训练，强调证明过程的逻辑性",
        introduction="数学系教授，研究方向为泛函分析"
    ),
    "english_junior": TeacherProfile(
        name="英语Emily老师",
        subject="英语",
        grade_level="初中",
        teaching_style="活泼有趣，善于用情景对话教学，注重听说读写全面发展",
        introduction="海外留学背景，专注于英语兴趣培养"
    ),
    "chemistry_senior": TeacherProfile(
        name="化学张老师",
        subject="化学",
        grade_level="高中",
        teaching_style="重视实验原理和化学反应本质，善于用微观视角解释宏观现象",
        introduction="化学竞赛教练，注重培养学生的化学思维"
    ),
}

