import tkinter as tk
from tkinter import ttk, colorchooser, messagebox
import json
import os

# --- 署名常量 ---
MY_SIGNATURE = "东台市实验中学城东分校-七（5）班-邹昊轩"
DATA_FILE = "school_assistant_data.json"

# --- 数据持久化辅助函数 ---
def save_data(key, data):
    all_data = {}
    if os.path.exists(DATA_FILE):
        try:
            with open(DATA_FILE, 'r', encoding='utf-8') as f:
                all_data = json.load(f)
        except:
            all_data = {}
    
    all_data[key] = data
    with open(DATA_FILE, 'w', encoding='utf-8') as f:
        json.dump(all_data, f, ensure_ascii=False, indent=4)

def load_data(key, default=None):
    if os.path.exists(DATA_FILE):
        try:
            with open(DATA_FILE, 'r', encoding='utf-8') as f:
                all_data = json.load(f)
            return all_data.get(key, default)
        except:
            return default
    return default

# --- 主程序类 ---
class SchoolAssistant:
    def __init__(self, root):
        self.root = root
        self.root.title(f"全能学习助手 - {MY_SIGNATURE}")
        self.root.geometry("900x650")
        
        style = ttk.Style()
        style.theme_use('clam')
        
        # 左侧导航栏
        self.sidebar = tk.Frame(root, width=150, bg='#2c3e50')
        self.sidebar.pack(side=tk.LEFT, fill=tk.Y)
        
        self.create_button("📓 笔记本", self.show_notebook)
        self.create_button("🎨 绘画本", self.show_drawing)
        self.create_button("📅 课程表", self.show_schedule)
        self.create_button("✅ 任务清单", self.show_tasks)
        self.create_button("🔤 英语单词", self.show_english)
        self.create_button("📐 数学公式", self.show_math)
        self.create_button("📜 语文古诗", self.show_chinese)

        self.content_area = tk.Frame(root, bg='white')
        self.content_area.pack(side=tk.RIGHT, expand=True, fill=tk.BOTH)

        # 初始化各个页面
        self.setup_notebook()
        self.setup_drawing()
        self.setup_schedule()
        self.setup_tasks()
        self.setup_english()
        self.setup_math()
        self.setup_chinese()

        self.show_notebook()

    def create_button(self, text, command):
        btn = tk.Button(self.sidebar, text=text, command=command, 
                        bg='#34495e', fg='white', activebackground='#1abc9c',
                        pady=10, borderwidth=0, font=("Microsoft YaHei", 10))
        btn.pack(fill=tk.X)

    def clear_content(self):
        for widget in self.content_area.winfo_children():
            widget.destroy()

    # ================= 1. 笔记本 (像画本一样只改选中部分) =================
    def setup_notebook(self):
        self.nb_frame = tk.Frame(self.content_area, bg='white')
        
        # 1. 顶部署名
        header = tk.Label(self.nb_frame, text=MY_SIGNATURE, 
                          font=("KaiTi", 16, "bold"), bg='white', fg='#2c3e50', pady=10)
        header.pack(fill=tk.X)

        # 2. 工具栏
        toolbar = tk.Frame(self.nb_frame, bg='#ecf0f1', pady=8)
        toolbar.pack(fill=tk.X, padx=10)
        
        # --- 颜色选择区 ---
        tk.Label(toolbar, text="字体颜色（双击选择）):", bg='#ecf0f1', font=("Microsoft YaHei", 10, "bold")).pack(side=tk.LEFT, padx=5)
        self.note_colors = ['black', 'red', 'green', 'blue', 'purple', 'orange']
        self.current_note_color = tk.StringVar(value='black')
        
        # 颜色按钮
        for color in self.note_colors:
            rb = tk.Radiobutton(toolbar, variable=self.current_note_color, value=color, 
                                bg=color, width=2, selectcolor=color,
                                activebackground=color, cursor="hand2")
            rb.pack(side=tk.LEFT, padx=3)
            # 点击颜色时，只改变“选中的文字”或者“接下来输入的文字”
            rb.bind("<Button-1>", lambda e: self.apply_text_color())

        # --- 字号选择区 ---
        tk.Label(toolbar, text="字号:", bg='#ecf0f1', font=("Microsoft YaHei", 10, "bold")).pack(side=tk.LEFT, padx=10)
        self.font_size = tk.IntVar(value=12)
        size_combo = ttk.Combobox(toolbar, textvariable=self.font_size, width=5, values=[10, 12, 14, 16, 20, 24, 28, 36])
        size_combo.pack(side=tk.LEFT)
        # 选择字号时，只改变“选中的文字”或者“接下来输入的文字”
        size_combo.bind("<<ComboboxSelected>>", lambda e: self.apply_text_font())

        # --- 功能按钮区 ---
        tk.Button(toolbar, text="清空文本", command=self.clear_note_text, bg='#e74c3c', fg='white', cursor="hand2").pack(side=tk.LEFT, padx=20)
        tk.Button(toolbar, text="💾 保存笔记", command=self.save_notebook, bg='#27ae60', fg='white', cursor="hand2").pack(side=tk.RIGHT, padx=5)

        # 3. 文本编辑区域
        self.note_text = tk.Text(self.nb_frame, font=("Consolas", 12), undo=True, 
                                 cursor="xterm", relief=tk.FLAT, padx=10, pady=10)
        self.note_text.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)

    def apply_text_color(self):
        # 核心逻辑：只修改选中的文本标签，或者设置当前输入颜色
        color = self.current_note_color.get()
        try:
            # 尝试修改选中的文字颜色
            self.note_text.tag_add("sel", "sel.first", "sel.last")
            self.note_text.tag_config("sel", foreground=color)
        except tk.TclError:
            # 如果没有选中文字，则设置当前输入光标颜色（影响接下来输入的字）
            self.note_text.config(fg=color, insertbackground=color)

    def apply_text_font(self):
        # 核心逻辑：只修改选中的文本标签，或者设置当前输入字体
        size = self.font_size.get()
        try:
            # 尝试修改选中的文字字体
            self.note_text.tag_add("sel", "sel.first", "sel.last")
            self.note_text.tag_config("sel", font=("Consolas", size))
        except tk.TclError:
            # 如果没有选中文字，则设置当前输入字体
            self.note_text.config(font=("Consolas", size))

    def clear_note_text(self):
        if messagebox.askyesno("确认", "确定要清空所有笔记内容吗？"):
            self.note_text.delete("1.0", tk.END)

    def save_notebook(self):
        text_content = self.note_text.get("1.0", tk.END)
        save_data("notebook_text", text_content)
        messagebox.showinfo("成功", "笔记文字已保存！")

    def show_notebook(self):
        self.clear_content()
        # 检查页面是否存在
        if not hasattr(self, 'nb_frame') or not self.nb_frame.winfo_exists():
            self.setup_notebook()
        self.nb_frame.pack(fill=tk.BOTH, expand=True)
        
        # 加载数据
        content = load_data("notebook_text", "")
        self.note_text.delete("1.0", tk.END)
        self.note_text.insert("1.0", content)

    # ================= 2. 绘画本 (优化画笔逻辑) =================
    def setup_drawing(self):
        self.dr_frame = tk.Frame(self.content_area, bg='white')
        
        tk.Label(self.dr_frame, text=MY_SIGNATURE, font=("KaiTi", 12), bg='white', fg='#7f8c8d', anchor='e').pack(fill=tk.X, padx=10)

        toolbar = tk.Frame(self.dr_frame, bg='#ecf0f1', pady=5)
        toolbar.pack(fill=tk.X)
        
        tk.Button(toolbar, text="🗑️ 清除画布", command=self.clear_canvas, bg='#e74c3c', fg='white').pack(side=tk.LEFT, padx=5)
        
        tk.Label(toolbar, text="颜色:", bg='#ecf0f1').pack(side=tk.LEFT, padx=10)
        self.brush_color = 'black'
        tk.Button(toolbar, text="🎨 选择颜色", command=self.choose_color).pack(side=tk.LEFT)
        
        tk.Label(toolbar, text="粗细:", bg='#ecf0f1').pack(side=tk.LEFT, padx=10)
        self.brush_size = tk.Scale(toolbar, from_=1, to=20, orient=tk.HORIZONTAL, bg='#ecf0f1')
        self.brush_size.set(3)
        self.brush_size.pack(side=tk.LEFT)

        self.canvas = tk.Canvas(self.dr_frame, bg='white', cursor="crosshair")
        self.canvas.pack(expand=True, fill=tk.BOTH)
        
        # 绑定事件：按下开始画，松开停止，移动持续画
        self.canvas.bind("<Button-1>", self.start_paint)
        self.canvas.bind("<B1-Motion>", self.paint)
        self.last_x, self.last_y = None, None

    def choose_color(self):
        color = colorchooser.askcolor(title="选择颜色")[1]
        if color:
            self.brush_color = color

    def start_paint(self, event):
        self.last_x, self.last_y = event.x, event.y

    def paint(self, event):
        if self.last_x and self.last_y:
            # 绘制线条，圆头端点更平滑
            self.canvas.create_line(self.last_x, self.last_y, event.x, event.y, 
                                    fill=self.brush_color, width=self.brush_size.get(), 
                                    capstyle=tk.ROUND, smooth=True)
        self.last_x, self.last_y = event.x, event.y

    def clear_canvas(self):
        self.canvas.delete("all")

    def show_drawing(self):
        self.clear_content()
        if not hasattr(self, 'dr_frame') or not self.dr_frame.winfo_exists():
            self.setup_drawing()
        self.dr_frame.pack(fill=tk.BOTH, expand=True)

    # ================= 3. 课程表 =================
    def setup_schedule(self):
        self.sc_frame = tk.Frame(self.content_area, bg='white')
        tk.Label(self.sc_frame, text=MY_SIGNATURE, font=("KaiTi", 12), bg='white', fg='#7f8c8d', anchor='e').pack(fill=tk.X, padx=10)
        
        top_bar = tk.Frame(self.sc_frame, bg='#ecf0f1', pady=5)
        top_bar.pack(fill=tk.X, side=tk.TOP)
        tk.Button(top_bar, text="💾 保存课程表", command=self.save_schedule).pack()
        
        table_frame = tk.Frame(self.sc_frame, bg='white')
        table_frame.pack(fill=tk.BOTH, expand=True, side=tk.TOP, padx=5, pady=5)
        
        self.schedule_entries = {}
        days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
        times = ["第1节", "第2节", "第3节", "第4节", "第5节", "第6节", "第7节", "第8节"]
        
        tk.Label(table_frame, text="时间/日期", bg='#bdc3c7', font=("Arial", 10, "bold")).grid(row=0, column=0, sticky="nsew")
        for i, day in enumerate(days):
            tk.Label(table_frame, text=day, bg='#ecf0f1', font=("Arial", 10, "bold")).grid(row=0, column=i+1, sticky="nsew")
            
        for r, time in enumerate(times):
            tk.Label(table_frame, text=time, bg='#ecf0f1', anchor="w").grid(row=r+1, column=0, sticky="nsew")
            for c in range(len(days)):
                entry = tk.Entry(table_frame, justify='center')
                entry.grid(row=r+1, column=c+1, sticky="nsew", padx=1, pady=1)
                self.schedule_entries[(r, c)] = entry
        
        for i in range(8): table_frame.rowconfigure(i+1, weight=1)
        for i in range(8): table_frame.columnconfigure(i+1, weight=1)

    def save_schedule(self):
        data = {}
        for (r, c), entry in self.schedule_entries.items():
            data[f"{r}_{c}"] = entry.get()
        save_data("schedule", data)
        messagebox.showinfo("成功", "课程表已保存！")

    def show_schedule(self):
        self.clear_content()
        if not hasattr(self, 'sc_frame') or not self.sc_frame.winfo_exists():
            self.setup_schedule()
        self.sc_frame.pack(fill=tk.BOTH, expand=True)
        data = load_data("schedule", {})
        for (r, c), entry in self.schedule_entries.items():
            entry.delete(0, tk.END)
            entry.insert(0, data.get(f"{r}_{c}", ""))

    # ================= 4. 任务清单 (卡片式修复版) =================
    def setup_tasks(self):
        self.tk_frame = tk.Frame(self.content_area, bg='white')
        tk.Label(self.tk_frame, text=MY_SIGNATURE, font=("KaiTi", 12), bg='white', fg='#7f8c8d', anchor='e').pack(fill=tk.X, padx=10)
        
        # 顶部输入栏
        input_frame = tk.Frame(self.tk_frame, bg='white', pady=10)
        input_frame.pack(fill=tk.X, padx=20)
        
        self.task_entry = tk.Entry(input_frame, font=("Microsoft YaHei", 12), relief=tk.FLAT, bg='#ecf0f1')
        self.task_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5, ipady=5)
        self.task_entry.bind("<Return>", self.add_task)
        
        tk.Button(input_frame, text="➕ 添加", command=self.add_task, bg='#3498db', fg='white', font=("Arial", 10, "bold")).pack(side=tk.LEFT, padx=5)
        tk.Button(input_frame, text="💾 保存", command=self.save_tasks, bg='#27ae60', fg='white', font=("Arial", 10, "bold")).pack(side=tk.RIGHT, padx=5)

        # 任务列表滚动区域
        self.task_container = tk.Frame(self.tk_frame, bg='white')
        self.task_container.pack(expand=True, fill=tk.BOTH, padx=20, pady=10)
        
        # 滚动条
        scrollbar = tk.Scrollbar(self.task_container)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        self.task_canvas = tk.Canvas(self.task_container, bg='white', highlightthickness=0, yscrollcommand=scrollbar.set)
        self.task_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.config(command=self.task_canvas.yview)
        
        # 实际放置任务的内部框架
        self.task_inner_frame = tk.Frame(self.task_canvas, bg='white')
        self.task_canvas.create_window((0, 0), window=self.task_inner_frame, anchor="nw")
        
        self.task_inner_frame.bind("<Configure>", lambda e: self.task_canvas.configure(scrollregion=self.task_canvas.bbox("all")))

    def add_task(self, event=None):
        task_text = self.task_entry.get()
        if task_text:
            self.create_task_card(task_text, False)
            self.task_entry.delete(0, tk.END)

    def create_task_card(self, text, is_done):
        # 每个任务是一个独立的Frame（卡片）
        card = tk.Frame(self.task_inner_frame, bg='#ecf0f1', pady=10, padx=15, relief=tk.RAISED, borderwidth=1)
        card.pack(fill=tk.X, pady=5, padx=5)
        
        # 任务文字标签
        lbl = tk.Label(card, text=text, bg='#ecf0f1', font=("Microsoft YaHei", 14), anchor='w')
        lbl.pack(fill=tk.X)
        
        # 初始状态样式
        if is_done:
            lbl.config(fg='gray', font=("Microsoft YaHei", 14, "overstrike"))
            card.config(bg='#dcdcdc')
            lbl.config(bg='#dcdcdc')

        # 绑定点击事件：点击卡片或文字都能切换状态
        def toggle(event=None):
            current_text = lbl.cget("text")
            if "✅" not in current_text:
                # 标记为完成
                new_text = "✅ " + current_text
                lbl.config(text=new_text, fg='gray', font=("Microsoft YaHei", 14, "overstrike"))
                card.config(bg='#dcdcdc')
                lbl.config(bg='#dcdcdc')
            else:
                # 标记为未完成 (去掉 "✅ ")
                new_text = current_text.replace("✅ ", "")
                lbl.config(text=new_text, fg='black', font=("Microsoft YaHei", 14))
                card.config(bg='#ecf0f1')
                lbl.config(bg='#ecf0f1')

        lbl.bind("<Button-1>", toggle)
        card.bind("<Button-1>", toggle)

    def save_tasks(self):
        tasks = []
        # 遍历所有子组件获取文字
        for widget in self.task_inner_frame.winfo_children():
            if isinstance(widget, tk.Frame):
                for child in widget.winfo_children():
                    if isinstance(child, tk.Label):
                        tasks.append(child.cget("text"))
        save_data("tasks", tasks)
        messagebox.showinfo("成功", "任务清单已保存！")

    def show_tasks(self):
        self.clear_content()
        if not hasattr(self, 'tk_frame') or not self.tk_frame.winfo_exists():
            self.setup_tasks()
        self.tk_frame.pack(fill=tk.BOTH, expand=True)
        
        # 清空旧任务
        for widget in self.task_inner_frame.winfo_children():
            widget.destroy()
            
        # 加载数据
        tasks = load_data("tasks", [])
        for task_text in tasks:
            is_done = "✅" in task_text
            # 如果是已完成状态，显示时去掉 "✅ " 前缀以便重新渲染，或者直接传入处理
            display_text = task_text.replace("✅ ", "") if is_done else task_text
            self.create_task_card(display_text, is_done)

    # ================= 5. 英语单词 (50个) =================
    def setup_english(self):
        self.en_frame = tk.Frame(self.content_area, bg='white')
        tk.Label(self.en_frame, text=MY_SIGNATURE, font=("KaiTi", 12), bg='white', fg='#7f8c8d', anchor='e').pack(fill=tk.X, padx=10)

        self.current_word = ""
        # 扩充到50个单词
        self.vocab_db = {
            "Apple": "n. 苹果", "Banana": "n. 香蕉", "Orange": "n. 橙子", "Grape": "n. 葡萄", "Watermelon": "n. 西瓜",
            "Cat": "n. 猫", "Dog": "n. 狗", "Elephant": "n. 大象", "Tiger": "n. 老虎", "Lion": "n. 狮子",
            "Red": "adj. 红色的", "Blue": "adj. 蓝色的", "Green": "adj. 绿色的", "Yellow": "adj. 黄色的", "Black": "adj. 黑色的",
            "One": "num. 一", "Two": "num. 二", "Three": "num. 三", "Four": "num. 四", "Five": "num. 五",
            "Run": "v. 跑", "Jump": "v. 跳", "Swim": "v. 游泳", "Fly": "v. 飞", "Eat": "v. 吃",
            "Happy": "adj. 快乐的", "Sad": "adj. 悲伤的", "Big": "adj. 大的", "Small": "adj. 小的", "Tall": "adj. 高的",
            "School": "n. 学校", "Teacher": "n. 老师", "Student": "n. 学生", "Classroom": "n. 教室", "Book": "n. 书",
            "Computer": "n. 电脑", "Mouse": "n. 鼠标", "Keyboard": "n. 键盘", "Screen": "n. 屏幕", "Internet": "n. 互联网",
            "Python": "n. 蟒蛇/编程语言", "Code": "n. 代码", "Robot": "n. 机器人", "Future": "n. 未来", "Dream": "n. 梦想",
            "Friend": "n. 朋友", "Family": "n. 家庭", "Love": "v./n. 爱", "Peace": "n. 和平", "World": "n. 世界"
        }
        
        self.word_label = tk.Label(self.en_frame, text="点击开始", font=("Arial", 40, "bold"), bg='white', fg='#2c3e50')
        self.word_label.pack(pady=50)
        
        self.meaning_label = tk.Label(self.en_frame, text="???", font=("Arial", 20), bg='white', fg='#7f8c8d')
        self.meaning_label.pack(pady=20)
        
        btn_frame = tk.Frame(self.en_frame, bg='white')
        btn_frame.pack()
        
        tk.Button(btn_frame, text="上一个", command=self.prev_word, bg='#95a5a6', fg='white', font=("Arial", 12)).pack(side=tk.LEFT, padx=10)
        tk.Button(btn_frame, text="下一个", command=self.next_word, bg='#3498db', fg='white', font=("Arial", 12)).pack(side=tk.LEFT, padx=10)
        tk.Button(btn_frame, text="显示答案", command=self.show_answer, bg='#e74c3c', fg='white', font=("Arial", 12)).pack(side=tk.LEFT, padx=10)

    def next_word(self):
        import random
        self.current_word = random.choice(list(self.vocab_db.keys()))
        self.word_label.config(text=self.current_word)
        self.meaning_label.config(text="???", fg='#7f8c8d')

    def prev_word(self):
        # 简单起见，上一个也随机，或者你可以维护一个列表索引
        self.next_word()

    def show_answer(self):
        if self.current_word:
            self.meaning_label.config(text=self.vocab_db[self.current_word], fg='#2c3e50')

    def show_english(self):
        self.clear_content()
        if not hasattr(self, 'en_frame') or not self.en_frame.winfo_exists():
            self.setup_english()
        self.en_frame.pack(fill=tk.BOTH, expand=True)

    # ================= 6. 数学公式查询 (直接显示版) =================
    def setup_math(self):
        self.math_frame = tk.Frame(self.content_area, bg='white')
        
        # 署名
        tk.Label(self.math_frame, text=MY_SIGNATURE, font=("KaiTi", 12), bg='white', fg='#7f8c8d', anchor='e').pack(fill=tk.X, padx=10)

        # 标题
        tk.Label(self.math_frame, text="常用数学公式速查表", font=("KaiTi", 20, "bold"), bg='white', fg='#2c3e50', pady=10).pack()

        # 使用Canvas+Scrollbar来显示公式，支持滚动
        canvas = tk.Canvas(self.math_frame, bg='white', highlightthickness=0)
        scrollbar = tk.Scrollbar(self.math_frame, orient="vertical", command=canvas.yview)
        self.scrollable_frame = tk.Frame(canvas, bg='white')

        self.scrollable_frame.bind(
            "<Configure>",
            lambda e: canvas.configure(scrollregion=canvas.bbox("all"))
        )

        canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
        canvas.configure(yscrollcommand=scrollbar.set)

        canvas.pack(side="left", fill="both", expand=True)
        scrollbar.pack(side="right", fill="y")

        # 20个数学公式数据
        formulas = [
            ("勾股定理", "a² + b² = c²"),
            ("圆面积", "S = πr²"),
            ("圆周长", "C = 2πr 或 C = πd"),
            ("三角形面积", "S = (底 × 高) / 2"),
            ("长方形面积", "S = 长 × 宽"),
            ("正方形面积", "S = 边长²"),
            ("梯形面积", "S = (上底 + 下底) × 高 / 2"),
            ("长方体体积", "V = 长 × 宽 × 高"),
            ("正方体体积", "V = 边长³"),
            ("圆柱体积", "V = πr²h"),
            ("圆锥体积", "V = (1/3)πr²h"),
            ("球体体积", "V = (4/3)πr³"),
            ("球体表面积", "S = 4πr²"),
            ("一元二次方程求根", "x = (-b ± √(b²-4ac)) / 2a"),
            ("完全平方公式", "(a±b)² = a² ± 2ab + b²"),
            ("平方差公式", "a² - b² = (a+b)(a-b)"),
            ("同底数幂相乘", "aᵐ × aⁿ = aᵐ⁺ⁿ"),
            ("幂的乘方", "(aᵐ)ⁿ = aᵐⁿ"),
            ("三角函数基本关系", "sin²α + cos²α = 1"),
            ("等差数列求和", "Sₙ = n(a₁ + aₙ) / 2")
        ]

        # 双列布局显示
        left_col = tk.Frame(self.scrollable_frame, bg='white')
        left_col.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=20, pady=10)
        
        right_col = tk.Frame(self.scrollable_frame, bg='white')
        right_col.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=20, pady=10)

        # 分配公式到左右列
        for i, (name, formula) in enumerate(formulas):
            target_col = left_col if i % 2 == 0 else right_col
            
            # 公式卡片样式
            card = tk.Frame(target_col, bg='#ecf0f1', pady=10, padx=15, relief=tk.RAISED, borderwidth=1)
            card.pack(fill=tk.X, pady=5)
            
            tk.Label(card, text=name, font=("KaiTi", 14, "bold"), bg='#ecf0f1', fg='#2c3e50', anchor='w').pack(fill=tk.X)
            tk.Label(card, text=formula, font=("Consolas", 16), bg='#ecf0f1', fg='#e74c3c', anchor='w', pady=5).pack(fill=tk.X)

    def show_math(self):
        self.clear_content()
        # 检查页面是否存在
        if not hasattr(self, 'math_frame') or not self.math_frame.winfo_exists():
            self.setup_math()
        self.math_frame.pack(fill=tk.BOTH, expand=True)

    # ================= 7. 语文古诗背诵 (10首) =================
    def setup_chinese(self):
        self.cn_frame = tk.Frame(self.content_area, bg='white')
        
        # 署名
        tk.Label(self.cn_frame, text=MY_SIGNATURE, font=("KaiTi", 12), bg='white', fg='#7f8c8d', anchor='e').pack(fill=tk.X, padx=10)

        # 扩充的10首古诗数据库
        self.poems_db = [
            {"title": "静夜思", "author": "李白", "content": "床前明月光，疑是地上霜。\n举头望明月，低头思故乡。"},
            {"title": "春晓", "author": "孟浩然", "content": "春眠不觉晓，处处闻啼鸟。\n夜来风雨声，花落知多少。"},
            {"title": "登鹳雀楼", "author": "王之涣", "content": "白日依山尽，黄河入海流。\n欲穷千里目，更上一层楼。"},
            {"title": "咏鹅", "author": "骆宾王", "content": "鹅，鹅，鹅，曲项向天歌。\n白毛浮绿水，红掌拨清波。"},
            {"title": "悯农 (其二)", "author": "李绅", "content": "锄禾日当午，汗滴禾下土。\n谁知盘中餐，粒粒皆辛苦。"},
            {"title": "赠汪伦", "author": "李白", "content": "李白乘舟将欲行，忽闻岸上踏歌声。\n桃花潭水深千尺，不及汪伦送我情。"},
            {"title": "望庐山瀑布", "author": "李白", "content": "日照香炉生紫烟，遥看瀑布挂前川。\n飞流直下三千尺，疑是银河落九天。"},
            {"title": "绝句", "author": "杜甫", "content": "两个黄鹂鸣翠柳，一行白鹭上青天。\n窗含西岭千秋雪，门泊东吴万里船。"},
            {"title": "游子吟", "author": "孟郊", "content": "慈母手中线，游子身上衣。\n临行密密缝，意恐迟迟归。\n谁言寸草心，报得三春晖。"},
            {"title": "江雪", "author": "柳宗元", "content": "千山鸟飞绝，万径人踪灭。\n孤舟蓑笠翁，独钓寒江雪。"}
        ]
        
        self.current_poem_idx = 0
        
        # 标题区域
        title_frame = tk.Frame(self.cn_frame, bg='white')
        title_frame.pack(pady=20)
        
        self.title_label = tk.Label(title_frame, text="古诗背诵", font=("KaiTi", 24, "bold"), bg='white')
        self.title_label.pack()
        
        # 诗词显示区域 (宣纸色背景)
        self.poem_display = tk.Text(self.cn_frame, font=("KaiTi", 20), height=8, width=25, bg='#fff9c4', fg='#2c3e50')
        self.poem_display.pack(padx=20, pady=10)
        
        # 控制按钮
        btn_frame = tk.Frame(self.cn_frame, bg='white')
        btn_frame.pack(pady=10)
        
        tk.Button(btn_frame, text="⬅️ 上一首", command=self.prev_poem, bg='#f39c12', fg='white', font=("Arial", 12)).pack(side=tk.LEFT, padx=10)
        tk.Button(btn_frame, text="👁️ 显示/隐藏", command=self.toggle_poem, bg='#9b59b6', fg='white', font=("Arial", 12)).pack(side=tk.LEFT, padx=10)
        tk.Button(btn_frame, text="下一首 ➡️", command=self.next_poem, bg='#f39c12', fg='white', font=("Arial", 12)).pack(side=tk.LEFT, padx=10)

        # 初始化显示
        self.show_poem_display()

    def show_poem_display(self):
        poem = self.poems_db[self.current_poem_idx]
        self.title_label.config(text=f"{poem['title']} - {poem['author']}")
        self.poem_display.delete("1.0", tk.END)
        self.poem_display.insert("1.0", poem['content'])

    def toggle_poem(self):
        # 简单的显示/隐藏逻辑
        current_text = self.poem_display.get("1.0", tk.END).strip()
        poem = self.poems_db[self.current_poem_idx]
        
        if current_text == poem['content']:
             # 隐藏：只显示提示
             self.poem_display.delete("1.0", tk.END)
             self.poem_display.insert("1.0", "(点击显示按钮查看内容...)")
        else:
             self.show_poem_display()

    def next_poem(self):
        self.current_poem_idx = (self.current_poem_idx + 1) % len(self.poems_db)
        self.show_poem_display()

    def prev_poem(self):
        self.current_poem_idx = (self.current_poem_idx - 1) % len(self.poems_db)
        self.show_poem_display()

    def show_chinese(self):
        self.clear_content()
        # 修复：检查页面是否存在
        if not hasattr(self, 'cn_frame') or not self.cn_frame.winfo_exists():
            self.setup_chinese()
        self.cn_frame.pack(fill=tk.BOTH, expand=True)

# --- 程序入口 ---
if __name__ == "__main__":
    root = tk.Tk()
    app = SchoolAssistant(root)
    root.mainloop()