#!/usr/bin/env python3
"""
根据课程表生成课后时间安排文档
===================

从每周课程表读取信息，生成今日的课后时间安排
"""

from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from datetime import datetime, timedelta
import re


def add_checkbox_paragraph(doc, text):
    """添加带方框的段落，方便打勾"""
    p = doc.add_paragraph()
    p.add_run('☐ ' + text)
    return p


def parse_time(time_str):
    """解析时间字符串，返回小时和分钟"""
    match = re.match(r'(\d+):(\d+)', time_str)
    if match:
        return int(match.group(1)), int(match.group(2))
    return None, None


def time_add_minutes(time_str, minutes):
    """给时间字符串增加分钟数，返回新的时间字符串"""
    hour, minute = parse_time(time_str)
    if hour is None:
        return time_str

    total_minutes = hour * 60 + minute + minutes
    new_hour = total_minutes // 60
    new_minute = total_minutes % 60

    return f'{new_hour:02d}:{new_minute:02d}'


def parse_course_table(filepath):
    """解析课程表文件"""
    with open(filepath, 'r', encoding='utf-8') as f:
        content = f.read()

    # 提取放学时间和课外班信息
    schedule = {}
    lines = content.split('\n')

    for line in lines:
        if '|' in line and '|' not in line.strip('|'):
            parts = [p.strip() for p in line.split('|')]
            if len(parts) >= 4:
                day = parts[0]
                if day in ['周一', '周二', '周三', '周四', '周五']:
                    schedule[day] = {
                        'school_out': parts[1],
                        'after_school': parts[2],
                    }

    return schedule


def generate_pinxuan_schedule(weekday_name, schedule_data):
    """生成品瑄的时间安排"""
    day_schedule = schedule_data.get(weekday_name, {})
    school_out = day_schedule.get('school_out', '16:30')
    after_school = day_schedule.get('after_school', '-')

    # 基础时间安排
    schedule = []
    tasks_today = []

    # 放学回家
    schedule.append(f'{school_out} 🏠 放学回家')

    # 休息
    rest_end = time_add_minutes(school_out, 30)
    schedule.append(f'{school_out}-{rest_end} ☕ 休息（30分钟）')

    # 语文五三天天练
    chinese_end = time_add_minutes(rest_end, 20)
    schedule.append(f'{rest_end}-{chinese_end} 📖 语文五三天天练（20分钟）')
    tasks_today.append('语文五三天天练（20分钟）')

    # 晚餐
    dinner_end = time_add_minutes(chinese_end, 20)
    schedule.append(f'{chinese_end}-{dinner_end} 🍚 晚餐（20分钟）')

    # 根据课外班调整
    if '自然拼读' in after_school:
        if '19:00' in after_school:
            schedule.append('16:40-17:00 📝 英语五三天天练（20分钟）')
            tasks_today.append('英语五三天天练（20分钟）')
            schedule.append('17:00-17:20 📐 数学五三天天练（20分钟）')
            tasks_today.append('数学五三天天练（20分钟）')
            schedule.append('17:20-18:00 ☕ 休息（40分钟）')
            schedule.append('18:00-18:30 🍚 晚餐（30分钟）')
            schedule.append('18:30-19:00 🚿 洗漱')
            schedule.append('19:00-20:30 📚 自然拼读（线上，90分钟）')
        elif '20:30' in after_school:
            schedule.append('16:40-17:00 📝 英语五三天天练（20分钟）')
            tasks_today.append('英语五三天天练（20分钟）')
            schedule.append('17:00-17:20 📐 数学五三天天练（20分钟）')
            tasks_today.append('数学五三天天练（20分钟）')
            schedule.append('17:20-18:00 ☕ 休息（40分钟）')
            schedule.append('18:00-18:30 🍚 晚餐（30分钟）')
            schedule.append('18:30-19:30 ☕ 休息（60分钟）')
            schedule.append('19:30-20:00 🚿 洗漱')
            schedule.append('20:30-22:00 📚 自然拼读（线上，90分钟）')
    elif '数学小班' in after_school:
        schedule.append('16:40-17:00 📝 英语五三天天练（20分钟）')
        tasks_today.append('英语五三天天练（20分钟）')
        schedule.append('17:00-17:20 📐 数学五三天天练（20分钟）')
        tasks_today.append('数学五三天天练（20分钟）')
        schedule.append('17:20-18:00 ☕ 休息（40分钟）')
        schedule.append('18:00-18:20 🍚 晚餐（20分钟）')
        schedule.append('18:20-18:40 🚿 洗漱')
        schedule.append('18:40-20:40 🔢 数学小班（线上，120分钟）')
    else:
        # 没有课外班
        schedule.append('16:40-17:00 📝 英语五三天天练（20分钟）')
        tasks_today.append('英语五三天天练（20分钟）')
        schedule.append('17:00-17:20 📐 数学五三天天练（20分钟）')
        tasks_today.append('数学五三天天练（20分钟）')
        schedule.append('17:20-17:40 ☕ 休息（20分钟）')
        schedule.append('17:40-18:00 🍚 晚餐（20分钟）')
        schedule.append('18:00-18:30 ☕ 休息（30分钟）')
        schedule.append('18:30-19:00 📖 语文人教点读（30分钟）')
        schedule.append('19:00-19:30 ✏️ 语文练字帖（30分钟）')
        schedule.append('19:30-20:00 📝 英语人教点读（30分钟）')
        schedule.append('20:00-20:30 🧮 数学每日一练（30分钟）')
        schedule.append('20:30-20:50 🚿 洗漱')

    # 检查是否有数学小班课后题
    if '数学小班' in after_school and '举一反三' in after_school:
        schedule.append('20:40-21:00 🧮 数学小班举一反三（20分钟）')
        tasks_today.append('数学小班举一反三（20分钟）')
        schedule.append('21:00-21:20 🚿 洗漱')
        schedule.append('21:30 😴 睡觉')
    else:
        schedule.append('20:50-21:10 🚿 洗漱')
        schedule.append('21:30 😴 睡觉')

    # 周末补做的任务
    tasks_weekend = [
        '语文人教点读',
        '语文练字帖',
        '英语人教点读',
        '数学每日一练',
    ]

    return {
        'schedule': schedule,
        'tasks_today': tasks_today,
        'tasks_weekend': tasks_weekend,
        'sleep_target': '21:30'
    }


def generate_xuanbo_schedule(weekday_name, schedule_data):
    """生成宣博的时间安排"""
    day_schedule = schedule_data.get(weekday_name, {})
    school_out = day_schedule.get('school_out', '16:10')
    after_school = day_schedule.get('after_school', '-')

    # 基础时间安排
    schedule = []
    tasks_today = []

    # 放学回家
    schedule.append(f'{school_out} 🏠 放学回家')

    # 休息
    schedule.append(f'{school_out}-16:30 ☕ 休息（20分钟）')

    # 语文人教点读
    schedule.append('16:30-16:40 📖 语文人教点读（10分钟）')
    tasks_today.append('语文人教点读（10分钟）')

    # 语文练字帖
    schedule.append('16:40-16:55 ✏️ 语文练字帖（15分钟）')
    tasks_today.append('语文练字帖（15分钟）')

    # 英语人教点读
    schedule.append('16:55-17:10 🔤 英语人教点读（15分钟）')
    tasks_today.append('英语人教点读（15分钟）')

    # 学而思每日一签
    schedule.append('17:10-17:30 🧮 学而思每日一签（20分钟）')
    tasks_today.append('学而思每日一签（20分钟）')

    # 晚餐
    schedule.append('17:30-17:50 🍚 晚餐（20分钟）')

    # 根据课外班调整
    if '自然拼读' in after_school:
        if '19:00' in after_school:
            schedule.append('17:50-18:10 ☕ 休息（20分钟）')
            schedule.append('18:10-18:30 🍚 晚餐（20分钟）')
            schedule.append('18:30-18:50 ☕ 休息（20分钟）')
            schedule.append('18:50-19:00 🚿 洗漱')
            schedule.append('19:00-20:30 📚 自然拼读（线上，90分钟）')
        elif '20:30' in after_school:
            schedule.append('17:50-18:10 ☕ 休息（20分钟）')
            schedule.append('18:10-18:30 🍚 晚餐（20分钟）')
            schedule.append('18:30-18:50 ☕ 休息（20分钟）')
            schedule.append('18:50-19:00 🚿 洗漱')
            schedule.append('19:00-20:30 ☕ 休息（90分钟）')
            schedule.append('20:30-22:00 📚 自然拼读（线上，90分钟）')
    elif 'KB2英语' in after_school:
        if '19:00' in after_school:
            schedule.append('17:50-18:10 ☕ 休息（20分钟）')
            schedule.append('18:10-18:30 🍚 晚餐（20分钟）')
            schedule.append('18:30-18:50 🚿 洗漱')
            schedule.append('18:50-19:00 🎒 准备上课')
            schedule.append('19:00-19:30 🌍 KB2英语（线上，30分钟）')
        elif '20:30' in after_school:
            schedule.append('17:50-18:10 ☕ 休息（20分钟）')
            schedule.append('18:10-18:30 🍚 晚餐（20分钟）')
            schedule.append('18:30-18:50 ☕ 休息（20分钟）')
            schedule.append('18:50-19:00 🚿 洗漱')
            schedule.append('19:00-20:00 ☕ 休息（60分钟）')
            schedule.append('20:00-20:30 🎒 准备上课')
            schedule.append('20:30-21:00 🌍 KB2英语（线上，30分钟）')
    elif '学而思数学' in after_school:
        schedule.append('17:50-18:10 ☕ 休息（20分钟）')
        schedule.append('18:10-18:30 🍚 晚餐（20分钟）')
        schedule.append('18:30-18:50 ☕ 休息（20分钟）')
        schedule.append('18:50-19:00 🚿 洗漱')
        schedule.append('19:00-20:30 🧮 学而思数学（线上，90分钟）')

    # 检查是否有课后题
    if '自然拼读' in after_school:
        schedule.append('20:30-20:50 📚 自然拼读课后题（20分钟）')
        tasks_today.append('自然拼读课后题（20分钟）')
        schedule.append('20:50-21:10 🚿 洗漱')
        schedule.append('21:30 😴 睡觉')
    elif 'KB' in after_school:
        schedule.append('21:00-21:20 📚 KB2 app作业（20分钟）')
        tasks_today.append('KB2 app作业（20分钟）')
        schedule.append('21:20-21:40 🚿 洗漱')
        schedule.append('21:30 😴 睡觉')
    elif '学而思数学' in after_school:
        schedule.append('20:30-20:50 🧮 学而思数学课后作业（20分钟）')
        tasks_today.append('学而思数学课后作业（20分钟）')
        schedule.append('20:50-21:10 🚿 洗漱')
        schedule.append('21:30 😴 睡觉')
    else:
        schedule.append('17:50-18:10 ☕ 休息（20分钟）')
        schedule.append('18:10-18:30 🍚 晚餐（20分钟）')
        schedule.append('18:30-18:50 ☕ 休息（20分钟）')
        schedule.append('18:50-19:00 🚿 洗漱')
        schedule.append('19:00-19:30 ☕ 休息（30分钟）')
        schedule.append('19:30-20:00 📖 课外阅读（30分钟）')
        schedule.append('20:00-20:30 🧮 数学口算练习（30分钟）')
        schedule.append('20:30-20:50 🚿 洗漱')
        schedule.append('21:30 😴 睡觉')

    return {
        'schedule': schedule,
        'tasks_today': tasks_today,
        'sleep_target': '21:30'
    }


def create_schedule_docx(pinxuan_data, xuanbo_data, output_path):
    """生成课后时间安排 Word 文档"""
    from schedule_template import create_schedule_docx
    return create_schedule_docx(pinxuan_data, xuanbo_data, output_path)


def main():
    """主函数"""
    # 获取当前日期
    now = datetime.now()
    weekday = now.weekday()  # 0=周一, 1=周二, ..., 6=周日
    weekday_names = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    weekday_name = weekday_names[weekday]

    date_str = now.strftime('%Y年%m月%d日')

    # 解析课程表
    pinxuan_schedule = parse_course_table('/root/.openclaw/workspace/space/品瑄/每周课程表.md')
    xuanbo_schedule = parse_course_table('/root/.openclaw/workspace/space/宣博/每周课程表.md')

    # 生成品瑄的数据
    pinxuan_data = generate_pinxuan_schedule(weekday_name, pinxuan_schedule)
    pinxuan_data['date'] = f'{date_str}（{weekday_name}）'

    # 生成宣博的数据
    xuanbo_data = generate_xuanbo_schedule(weekday_name, xuanbo_schedule)
    xuanbo_data['date'] = f'{date_str}（{weekday_name}）'

    # 生成文档
    output_path = f'/root/.openclaw/workspace/space/共享资源/{now.strftime("%Y-%m-%d")}_课后时间安排.docx'
    create_schedule_docx(pinxuan_data, xuanbo_data, output_path)

    print(f'✅ 课后时间安排文档已生成: {output_path}')
    print(f'📅 日期: {date_str}（{weekday_name}）')
    return output_path


if __name__ == '__main__':
    main()
