import os
import re

CLASS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '.claude', 'memory', 'class')

def detect_format(text):
    first_line = text.strip().split('\n')[0].strip()
    if first_line.startswith('# 学生画像档案'):
        return 'new'
    if first_line.startswith('# 用户画像'):
        if '|' in text[:500]:
            return 'new_structure_wrong_title'
        else:
            return 'old_list'
    if '用户画像' in first_line:
        return 'unique'
    return 'unknown'

def parse_old_list_format(text, file_path):
    data = {
        'name': '', 'nickname': '', 'gender': '', 'class_name': '', 'class_time': '',
        'campus': '', 'course_type': '', 'enroll_date': '', 'birthday': '', 'age': '',
        'temperament': '', 'temperament_desc': '', 'social_style': '', 'social_desc': '',
        'emotion': '', 'emotion_desc': '',
        'focus': '', 'learning_style': '', 'strengths': [], 'weaknesses': [],
        'classroom_table': [], 'skills': [], 'social_emotional': [],
        'motivation': '', 'instructions': '',
        'teaching_tips': [], 'health_allergy': '', 'health_condition': '',
        'special_attention': '', 'parent_comm': '', 'parent_focus': '',
        'education_fit': '', 'growth_records': [],
        'ai_skills': {}, 'has_ai_section': False,
        'created_date': '', 'updated_date': '',
    }
    
    lines = text.split('\n')
    current_section = ''
    in_growth = False
    in_classroom = False
    in_skills = False
    in_social = False
    in_ai_section = False
    
    for i, line in enumerate(lines):
        stripped = line.strip()
        
        if re.match(r'^##\s*基本信息', stripped):
            current_section = 'basic'
            continue
        if re.match(r'^##\s*性格特点', stripped):
            current_section = 'personality'
            continue
        if re.match(r'^##\s*学习特点', stripped):
            current_section = 'learning'
            continue
        if re.match(r'^##\s*课堂行为特征', stripped):
            current_section = 'classroom'
            in_classroom = True
            continue
        if re.match(r'^##\s*技能评估', stripped):
            current_section = 'skills'
            in_skills = True
            continue
        if re.match(r'^##\s*社交与情绪', stripped):
            current_section = 'social'
            in_social = True
            continue
        if re.match(r'^##\s*激励方式', stripped):
            current_section = 'motivation'
            continue
        if re.match(r'^##\s*教学建议', stripped):
            current_section = 'teaching'
            continue
        if re.match(r'^##\s*特殊情况', stripped):
            current_section = 'special'
            continue
        if re.match(r'^##\s*家长沟通偏好', stripped):
            current_section = 'parent'
            continue
        if re.match(r'^##\s*成长轨迹', stripped):
            current_section = 'growth'
            in_growth = True
            continue
        if re.match(r'^##\s*AI编程技能特征', stripped):
            current_section = 'ai_skills'
            in_ai_section = True
            continue
        
        if current_section == 'basic':
            m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
            if m:
                key = m.group(1).strip()
                val = m.group(2).strip()
                if '姓名' in key: data['name'] = val
                elif '小名' in key or '昵称' in key: data['nickname'] = val
                elif '性别' in key: data['gender'] = val
                elif '班级' in key and '上课' not in key: data['class_name'] = val
                elif '上课时间' in key: data['class_time'] = val
                elif '校区' in key: data['campus'] = val
                elif '课程类型' in key: data['course_type'] = val
                elif '入学时间' in key: data['enroll_date'] = val
                elif '出生日期' in key: data['birthday'] = val
                elif '年龄' in key: data['age'] = val
        
        elif current_section == 'personality':
            m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
            if m:
                key = m.group(1).strip()
                val = m.group(2).strip()
                if '整体气质' in key or '气质' in key:
                    data['temperament'] = val
                elif '社交风格' in key:
                    data['social_style'] = val
                elif '情绪特点' in key:
                    data['emotion'] = val
            m2 = re.match(r'^\s+-\s*表现[：:]\s*(.*)', stripped)
            if m2:
                desc = m2.group(1).strip()
                if data['temperament'] and not data['temperament_desc']:
                    data['temperament_desc'] = desc
                elif data['social_style'] and not data['social_desc']:
                    data['social_desc'] = desc
                elif data['emotion'] and not data['emotion_desc']:
                    data['emotion_desc'] = desc
        
        elif current_section == 'learning':
            m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
            if m:
                key = m.group(1).strip()
                val = m.group(2).strip()
                if '专注力' in key: data['focus'] = val
                elif '学习方式' in key: data['learning_style'] = val
            if stripped.startswith('- **优势能力**'):
                current_section = 'strengths'
                continue
            if stripped.startswith('- **待发展能力**'):
                current_section = 'weaknesses'
                continue
        
        elif current_section == 'strengths':
            if stripped.startswith('- **'):
                current_section = 'learning'
                continue
            if stripped.startswith('  - ') or stripped.startswith('- '):
                data['strengths'].append(stripped.lstrip('- ').strip())
        
        elif current_section == 'weaknesses':
            if stripped.startswith('##') or stripped.startswith('- **'):
                current_section = 'learning'
                continue
            if stripped.startswith('  - ') or stripped.startswith('- '):
                data['weaknesses'].append(stripped.lstrip('- ').strip())
        
        elif current_section == 'classroom' and in_classroom:
            if stripped.startswith('##'):
                in_classroom = False
                current_section = ''
            elif '|' in stripped:
                data['classroom_table'].append(stripped)
        
        elif current_section == 'skills' and in_skills:
            if stripped.startswith('##'):
                in_skills = False
                current_section = ''
            elif stripped.startswith('- **'):
                data['skills'].append(stripped)
        
        elif current_section == 'social' and in_social:
            if stripped.startswith('##'):
                in_social = False
                current_section = ''
            elif stripped.startswith('- **'):
                data['social_emotional'].append(stripped)
        
        elif current_section == 'motivation':
            m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
            if m:
                key = m.group(1).strip()
                val = m.group(2).strip()
                if '激励' in key: data['motivation'] = val
                elif '听指令' in key: data['instructions'] = val
            if stripped.startswith('##'):
                current_section = ''
        
        elif current_section == 'teaching':
            if stripped.startswith('##'):
                current_section = ''
            elif re.match(r'^\d+[.、]', stripped) or stripped.startswith('- '):
                data['teaching_tips'].append(stripped)
        
        elif current_section == 'special':
            m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
            if m:
                key = m.group(1).strip()
                val = m.group(2).strip()
                if '过敏' in key: data['health_allergy'] = val
                elif '健康' in key: data['health_condition'] = val
                elif '特别关注' in key or '需要' in key: data['special_attention'] = val
            if stripped.startswith('##'):
                current_section = ''
        
        elif current_section == 'parent':
            m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
            if m:
                key = m.group(1).strip()
                val = m.group(2).strip()
                if '沟通方式' in key: data['parent_comm'] = val
                elif '关注点' in key: data['parent_focus'] = val
                elif '教育理念' in key or '匹配' in key: data['education_fit'] = val
            if stripped.startswith('##'):
                current_section = ''
        
        elif current_section == 'growth' and in_growth:
            if stripped.startswith('##') and '成长' not in stripped:
                in_growth = False
                current_section = ''
            elif '|' in stripped:
                data['growth_records'].append(stripped)
        
        elif current_section == 'ai_skills' and in_ai_section:
            if stripped.startswith('##') and 'AI' not in stripped and '基础' not in stripped and '协作' not in stripped:
                in_ai_section = False
                current_section = ''
            else:
                m = re.match(r'^-\s*\*\*(.+?)\*\*[：:]\s*(.*)', stripped)
                if m:
                    data['ai_skills'][m.group(1).strip()] = m.group(2).strip()
        
        m = re.search(r'\*创建日期[：:]\s*(.*)', stripped)
        if m: data['created_date'] = m.group(1).strip()
        m = re.search(r'\*更新日期[：:]\s*(.*)', stripped)
        if m: data['updated_date'] = m.group(1).strip()
    
    return data

def generate_new_profile(data, file_path):
    parts = os.path.normpath(file_path).split(os.sep)
    class_name = ''
    student_name = data['name']
    for i, p in enumerate(parts):
        if p == 'profile.md':
            if i >= 2:
                student_name = parts[i-1]
                class_name = parts[i-2]
            break
    
    course_type = data['course_type'] or ''
    is_disc = 'DISC' in course_type or '发现' in class_name or '螺丝刀' in course_type
    is_aicode = 'AICODE' in course_type or 'AICODE' in class_name or 'AI' in course_type
    is_spike = 'SPIKE' in course_type or 'SPIKE' in class_name
    is_wedo = 'WEDO' in course_type or 'Wedo' in class_name or 'CREATE' in course_type or '创造' in class_name
    
    lines = []
    lines.append(f'# 学生画像档案：{student_name}')
    lines.append('')
    
    if is_aicode:
        lines.append(f'> 班级：{data["class_name"] or class_name}')
        lines.append(f'> 课程：{course_type}')
        lines.append(f'> 年级：{data["age"]}')
        lines.append(f'> 建档日期：{data["created_date"] or "2026-03-25"}')
        lines.append(f'> 状态：✅ 已更新')
    else:
        lines.append(f'> 班级：{data["class_name"] or class_name}')
        lines.append(f'> 课程：{course_type}')
        lines.append(f'> 建档日期：{data["created_date"] or "2026-03-25"}')
        lines.append(f'> 状态：✅ 已更新')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 一、基础信息')
    lines.append('')
    lines.append('| 项目 | 内容 |')
    lines.append('|------|------|')
    lines.append(f'| **姓名** | {data["name"]} |')
    if data['nickname']:
        lines.append(f'| **小名/昵称** | {data["nickname"]} |')
    lines.append(f'| **性别** | {data["gender"]} |')
    lines.append(f'| **班级** | {data["class_name"] or class_name} |')
    lines.append(f'| **上课时间** | {data["class_time"]} |')
    if data['campus']:
        lines.append(f'| **校区** | {data["campus"]} |')
    lines.append(f'| **课程类型** | {course_type} |')
    lines.append(f'| **入学时间** | {data["enroll_date"]} |')
    if data['birthday']:
        lines.append(f'| **出生日期** | {data["birthday"]} |')
    lines.append(f'| **年龄** | {data["age"]} |')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 二、性格气质画像')
    lines.append('')
    lines.append('### 2.1 气质类型')
    if data['temperament']:
        lines.append(f'- ✅ **{data["temperament"]}**')
        if data['temperament_desc']:
            lines.append(f'  - {data["temperament_desc"]}')
    else:
        lines.append('- [ ] 活泼型（外向、精力充沛、反应快）')
        lines.append('- [ ] 谨慎型（内向、观察后行动、深思熟虑）')
        lines.append('- [ ] 平和型（情绪稳定、适应性良好）')
        lines.append('- [ ] 敏感型（细腻、情绪反应强、需要安全感）')
        lines.append('- [ ] 混合型（请注明：______）')
    
    lines.append('')
    lines.append('### 2.2 社交互动模式')
    if data['social_emotional']:
        for item in data['social_emotional']:
            lines.append(f'- {item.lstrip("- ")}')
    else:
        lines.append(f'- **与同伴互动**：{data["social_style"] or "待观察"}')
        if data['social_desc']:
            lines.append(f'  - {data["social_desc"]}')
        lines.append('- **与老师互动**：待观察')
        lines.append('- **冲突处理方式**：待观察')
    
    lines.append('')
    lines.append('### 2.3 情绪特征')
    lines.append(f'- **整体稳定性**：{data["emotion"] or "待观察"}')
    if data['emotion_desc']:
        lines.append(f'  - {data["emotion_desc"]}')
    lines.append('- **压力反应**：待观察')
    lines.append('- **情绪触发点**：待记录')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 三、学习风格与能力')
    lines.append('')
    lines.append('### 3.1 学习方式偏好')
    lines.append(f'- **信息接收**：{data["learning_style"] or "待观察"}')
    lines.append('- **学习节奏**：待观察')
    lines.append('- **思考方式**：待观察')
    
    lines.append('')
    lines.append('### 3.2 专注力特征')
    lines.append('| 维度 | 评估 |')
    lines.append('|------|------|')
    lines.append(f'| 平均专注时长 | {data["focus"] or "待观察"} |')
    lines.append('| 进入专注所需时间 | 待观察 |')
    lines.append('| 抗干扰能力 | 待观察 |')
    lines.append('| 专注力维持因素 | 待记录 |')
    
    lines.append('')
    lines.append('### 3.3 能力维度雷达')
    lines.append('')
    lines.append('| 维度 | 评分 | 具体表现描述 |')
    lines.append('|------|:---:|:------------|')
    
    if is_disc:
        dims = ['空间想象', '逻辑思维', '创造力', '精细动作', '语言表达', '问题解决', '颜色形状识别', '收纳与秩序感']
    elif is_aicode:
        dims = ['空间想象', '逻辑思维', '创造力', '编程能力', '语言表达', 'AI沟通']
    elif is_spike:
        dims = ['空间想象', '逻辑思维', '创造力', '精细动作', '语言表达', '问题解决']
    else:
        dims = ['空间想象', '逻辑思维', '创造力', '精细动作', '语言表达', '问题解决']
    
    for d in dims:
        lines.append(f'| {d} | （待评估） | |')
    
    lines.append('')
    lines.append('### 3.4 优势与待发展')
    lines.append('- **核心优势能力**：' + ('、'.join(data['strengths']) if data['strengths'] else '待观察'))
    lines.append('- **需要重点培养的能力**：' + ('、'.join(data['weaknesses']) if data['weaknesses'] else '待观察'))
    lines.append('- **近期进步最明显的方面**：待观察')
    if data['motivation']:
        lines.append(f'- **最有效的激励方式**：{data["motivation"]}')
    if data['instructions']:
        lines.append(f'- **听指令情况**：{data["instructions"]}')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 四、课程表现特征')
    lines.append('')
    lines.append('### 4.1 课堂行为模式')
    lines.append('| 环节 | 典型表现 |')
    lines.append('|------|---------|')
    if data['classroom_table']:
        for row in data['classroom_table']:
            if '|' in row and '环节' not in row and '---' not in row:
                lines.append(row)
    else:
        lines.append('| 导入环节 | 待观察 |')
        lines.append('| 讲解示范 | 待观察 |')
        lines.append('| 动手操作 | 待观察 |')
        lines.append('| 调试优化 | 待观察 |')
        lines.append('| 分享展示 | 待观察 |')
    
    lines.append('')
    lines.append('### 4.2 作品完成特征')
    lines.append('- **完成度**：待观察')
    lines.append('- **质量倾向**：待观察')
    lines.append('- **创意表现**：待观察')
    lines.append('- **细节处理**：待观察')
    
    if is_disc and data['skills']:
        lines.append('')
        lines.append('### 4.3 精细动作技能特征')
        for s in data['skills']:
            lines.append(f'- {s.lstrip("- ")}')
    
    lines.append('')
    lines.append('### 4.3 遇到困难时的反应')
    lines.append('- **第一反应**：待观察')
    lines.append('- **能坚持尝试次数**：待观察')
    lines.append('- **最有效的鼓励方式**：' + (data['motivation'] or '待观察'))
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 五、特殊事项记录')
    lines.append('')
    lines.append('### 5.1 健康信息')
    lines.append(f'- **过敏史**：{data["health_allergy"]}')
    lines.append(f'- **健康状况**：{data["health_condition"]}')
    lines.append('- **需要特别关注**：' + (data['special_attention'] or ''))
    
    lines.append('')
    lines.append('### 5.2 家庭背景（简要）')
    lines.append('- **家庭成员**：')
    lines.append('- **主要接送人**：')
    lines.append('- **家庭特殊情况**：')
    lines.append('- **在家乐高/编程情况**：')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 六、家长沟通档案')
    lines.append('')
    lines.append('### 6.1 家长基本信息')
    lines.append('| 关系 | 称呼 | 职业特点 | 教育理念 |')
    lines.append('|------|------|---------|---------|')
    lines.append('| 父亲 | | | |')
    lines.append('| 母亲 | | | |')
    lines.append('| 主要联系人 | | | |')
    
    lines.append('')
    lines.append('### 6.2 沟通偏好')
    lines.append(f'- **首选沟通方式**：{data["parent_comm"]}')
    lines.append('- **合适联系时间**：')
    lines.append('- **期望沟通频率**：')
    lines.append('- **信息接收风格**：')
    
    lines.append('')
    lines.append('### 6.3 家长关注点与期待')
    lines.append(f'- **最关注的方面**：{data["parent_focus"]}')
    lines.append('- **对孩子在这门课的期待**：')
    lines.append('- **过往反馈过的顾虑**：')
    lines.append(f'- **与机构理念的契合度**：{data["education_fit"]}')
    
    lines.append('')
    lines.append('### 6.4 历史沟通记录')
    lines.append('| 日期 | 方式 | 主题 | 要点记录 |')
    lines.append('|------|------|------|---------|')
    lines.append('| | | | |')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    lines.append('## 七、成长轨迹')
    lines.append('')
    lines.append('| 时间 | 关键事件 | 能力发展 |')
    lines.append('|-----|---------|---------|')
    if data['growth_records']:
        for row in data['growth_records']:
            if '|' in row and '时间' not in row and '---' not in row:
                lines.append(row)
    else:
        lines.append('| 入学初 | | |')
    
    lines.append('')
    lines.append('---')
    lines.append('')
    
    if is_aicode and data['ai_skills']:
        lines.append('## 四、AI编程技能特征')
        lines.append('')
        lines.append('### 4.1 基础操作能力')
        lines.append('')
        lines.append('| 能力项 | 水平 | 具体表现 |')
        lines.append('|--------|:---:|----------|')
        for k, v in data['ai_skills'].items():
            if '鼠标' in k or '键盘' in k or '抽象' in k:
                lines.append(f'| {k} | {v} | |')
        lines.append('')
        lines.append('### 4.2 Prompt与AI协作能力')
        lines.append('')
        lines.append('| 技能维度 | 表现描述 |')
        lines.append('|----------|----------|')
        for k, v in data['ai_skills'].items():
            if 'Prompt' in k or '迭代' in k or '幻觉' in k or 'Few' in k or '上下文' in k or '代码缝合' in k or '逻辑' in k:
                lines.append(f'| {k} | {v} |')
        lines.append('')
        lines.append('---')
        lines.append('')
    
    if data['teaching_tips']:
        lines.append('## 八、教学建议')
        lines.append('')
        for tip in data['teaching_tips']:
            lines.append(tip)
        lines.append('')
        lines.append('---')
        lines.append('')
    
    lines.append('')
    created = data['created_date'] or '2026-03-25'
    updated = data['updated_date'] or created
    lines.append(f'*创建日期：{created}*')
    lines.append(f'*最后更新：{updated}*')
    
    return '\n'.join(lines)

def fix_wrong_title(text, file_path):
    parts = os.path.normpath(file_path).split(os.sep)
    student_name = ''
    for i, p in enumerate(parts):
        if p == 'profile.md' and i >= 2:
            student_name = parts[i-1]
            break
    
    lines = text.split('\n')
    if lines and lines[0].strip() == '# 用户画像':
        lines[0] = f'# 学生画像档案：{student_name}'
    return '\n'.join(lines)

def convert_unique_format(text, file_path):
    parts = os.path.normpath(file_path).split(os.sep)
    student_name = ''
    for i, p in enumerate(parts):
        if p == 'profile.md' and i >= 2:
            student_name = parts[i-1]
            break
    
    data = {
        'name': student_name, 'nickname': '', 'gender': '', 'class_name': '',
        'class_time': '', 'campus': '', 'course_type': '', 'enroll_date': '',
        'birthday': '', 'age': '', 'temperament': '', 'temperament_desc': '',
        'social_style': '', 'social_desc': '', 'emotion': '', 'emotion_desc': '',
        'focus': '', 'learning_style': '', 'strengths': [], 'weaknesses': [],
        'classroom_table': [], 'skills': [], 'social_emotional': [],
        'motivation': '', 'instructions': '', 'teaching_tips': [],
        'health_allergy': '', 'health_condition': '', 'special_attention': '',
        'parent_comm': '', 'parent_focus': '', 'education_fit': '',
        'growth_records': [], 'ai_skills': {}, 'has_ai_section': False,
        'created_date': '', 'updated_date': '',
    }
    
    lines = text.split('\n')
    for line in lines:
        stripped = line.strip()
        m = re.search(r'\*建档日期[：:]\s*(.*)', stripped)
        if m: data['created_date'] = m.group(1).strip()
        m = re.search(r'\*更新日期[：:]\s*(.*)', stripped)
        if m: data['updated_date'] = m.group(1).strip()
        
        if '班级' in stripped and '：' in stripped and not data['class_name']:
            cm = re.match(r'.*班级[：:]\s*(.*)', stripped)
            if cm: data['class_name'] = cm.group(1).strip()
        if '课程类型' in stripped and '：' in stripped:
            cm = re.match(r'.*课程类型[：:]\s*(.*)', stripped)
            if cm: data['course_type'] = cm.group(1).strip()
        if '年龄段' in stripped and '：' in stripped:
            cm = re.match(r'.*年龄段[：:]\s*(.*)', stripped)
            if cm: data['age'] = cm.group(1).strip()
        if '上课时间' in stripped and '：' in stripped:
            cm = re.match(r'.*上课时间[：:]\s*(.*)', stripped)
            if cm: data['class_time'] = cm.group(1).strip()
    
    return generate_new_profile(data, file_path)

def process_profile(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
    
    fmt = detect_format(text)
    
    if fmt == 'new':
        return False
    
    if fmt == 'new_structure_wrong_title':
        new_text = fix_wrong_title(text, file_path)
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(new_text)
        return True
    
    if fmt == 'old_list':
        data = parse_old_list_format(text, file_path)
        new_text = generate_new_profile(data, file_path)
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(new_text)
        return True
    
    if fmt == 'unique':
        new_text = convert_unique_format(text, file_path)
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(new_text)
        return True
    
    return False

def main():
    updated = 0
    skipped = 0
    errors = 0
    
    for root, dirs, files in os.walk(CLASS_DIR):
        for f in files:
            if f != 'profile.md':
                continue
            file_path = os.path.join(root, f)
            try:
                if process_profile(file_path):
                    updated += 1
                    rel = os.path.relpath(file_path, CLASS_DIR)
                    print(f'  ✅ 已更新: {rel}')
                else:
                    skipped += 1
            except Exception as e:
                errors += 1
                rel = os.path.relpath(file_path, CLASS_DIR)
                print(f'  ❌ 错误: {rel} - {e}')
    
    print(f'\n{"="*50}')
    print(f'更新完成！')
    print(f'  ✅ 已更新: {updated} 个文件')
    print(f'  ⏭️  已跳过(已是最新格式): {skipped} 个文件')
    print(f'  ❌ 错误: {errors} 个文件')

if __name__ == '__main__':
    main()