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

WORD_FILE = "words_data.json"

class WordReciteApp:
    def __init__(self, root):
        self.root = root
        self.root.title("英语单词背诵工具")
        self.root.geometry("560x450")
        self.root.resizable(False, False)

        self.word_list = self.load_words()
        self.current_index = 0
        self.show_meaning = False

        self.create_widgets()
        self.refresh_word_display()

    # 内置固定100个单词库
    def get_full_word_lib(self):
        return [
            {"word": "apple", "meaning": "苹果", "mastered": False},
            {"word": "banana", "meaning": "香蕉", "mastered": False},
            {"word": "computer", "meaning": "电脑", "mastered": False},
            {"word": "beautiful", "meaning": "美丽的", "mastered": False},
            {"word": "program", "meaning": "程序；编程", "mastered": False},
            {"word": "book", "meaning": "书籍", "mastered": False},
            {"word": "pen", "meaning": "钢笔", "mastered": False},
            {"word": "pencil", "meaning": "铅笔", "mastered": False},
            {"word": "desk", "meaning": "书桌", "mastered": False},
            {"word": "chair", "meaning": "椅子", "mastered": False},
            {"word": "school", "meaning": "学校", "mastered": False},
            {"word": "student", "meaning": "学生", "mastered": False},
            {"word": "teacher", "meaning": "老师", "mastered": False},
            {"word": "classroom", "meaning": "教室", "mastered": False},
            {"word": "blackboard", "meaning": "黑板", "mastered": False},
            {"word": "bag", "meaning": "书包", "mastered": False},
            {"word": "ruler", "meaning": "尺子", "mastered": False},
            {"word": "eraser", "meaning": "橡皮", "mastered": False},
            {"word": "paper", "meaning": "纸张", "mastered": False},
            {"word": "window", "meaning": "窗户", "mastered": False},
            {"word": "door", "meaning": "门", "mastered": False},
            {"word": "wall", "meaning": "墙壁", "mastered": False},
            {"word": "floor", "meaning": "地板", "mastered": False},
            {"word": "ceiling", "meaning": "天花板", "mastered": False},
            {"word": "light", "meaning": "灯；光线", "mastered": False},
            {"word": "sun", "meaning": "太阳", "mastered": False},
            {"word": "moon", "meaning": "月亮", "mastered": False},
            {"word": "star", "meaning": "星星", "mastered": False},
            {"word": "cloud", "meaning": "云朵", "mastered": False},
            {"word": "rain", "meaning": "下雨；雨水", "mastered": False},
            {"word": "snow", "meaning": "雪；下雪", "mastered": False},
            {"word": "wind", "meaning": "风", "mastered": False},
            {"word": "sky", "meaning": "天空", "mastered": False},
            {"word": "river", "meaning": "河流", "mastered": False},
            {"word": "lake", "meaning": "湖泊", "mastered": False},
            {"word": "sea", "meaning": "大海", "mastered": False},
            {"word": "tree", "meaning": "树木", "mastered": False},
            {"word": "flower", "meaning": "花朵", "mastered": False},
            {"word": "grass", "meaning": "草地", "mastered": False},
            {"word": "leaf", "meaning": "树叶", "mastered": False},
            {"word": "fruit", "meaning": "水果", "mastered": False},
            {"word": "orange", "meaning": "橙子；橙色", "mastered": False},
            {"word": "grape", "meaning": "葡萄", "mastered": False},
            {"word": "pear", "meaning": "梨子", "mastered": False},
            {"word": "watermelon", "meaning": "西瓜", "mastered": False},
            {"word": "meat", "meaning": "肉类", "mastered": False},
            {"word": "rice", "meaning": "米饭", "mastered": False},
            {"word": "bread", "meaning": "面包", "mastered": False},
            {"word": "milk", "meaning": "牛奶", "mastered": False},
            {"word": "egg", "meaning": "鸡蛋", "mastered": False},
            {"word": "fish", "meaning": "鱼", "mastered": False},
            {"word": "chicken", "meaning": "鸡肉；小鸡", "mastered": False},
            {"word": "tomato", "meaning": "西红柿", "mastered": False},
            {"word": "potato", "meaning": "土豆", "mastered": False},
            {"word": "carrot", "meaning": "胡萝卜", "mastered": False},
            {"word": "onion", "meaning": "洋葱", "mastered": False},
            {"word": "house", "meaning": "房子", "mastered": False},
            {"word": "room", "meaning": "房间", "mastered": False},
            {"word": "bed", "meaning": "床", "mastered": False},
            {"word": "sofa", "meaning": "沙发", "mastered": False},
            {"word": "table", "meaning": "桌子", "mastered": False},
            {"word": "clock", "meaning": "时钟", "mastered": False},
            {"word": "watch", "meaning": "手表；观看", "mastered": False},
            {"word": "radio", "meaning": "收音机", "mastered": False},
            {"word": "phone", "meaning": "手机；电话", "mastered": False},
            {"word": "television", "meaning": "电视机", "mastered": False},
            {"word": "cup", "meaning": "杯子", "mastered": False},
            {"word": "bowl", "meaning": "碗", "mastered": False},
            {"word": "plate", "meaning": "盘子", "mastered": False},
            {"word": "fork", "meaning": "叉子", "mastered": False},
            {"word": "knife", "meaning": "小刀", "mastered": False},
            {"word": "spoon", "meaning": "勺子", "mastered": False},
            {"word": "clothes", "meaning": "衣服", "mastered": False},
            {"word": "shirt", "meaning": "衬衫", "mastered": False},
            {"word": "skirt", "meaning": "短裙", "mastered": False},
            {"word": "shoe", "meaning": "鞋子", "mastered": False},
            {"word": "sock", "meaning": "袜子", "mastered": False},
            {"word": "hat", "meaning": "帽子", "mastered": False},
            {"word": "gloves", "meaning": "手套", "mastered": False},
            {"word": "father", "meaning": "父亲", "mastered": False},
            {"word": "mother", "meaning": "母亲", "mastered": False},
            {"word": "brother", "meaning": "兄弟", "mastered": False},
            {"word": "sister", "meaning": "姐妹", "mastered": False},
            {"word": "parent", "meaning": "父母", "mastered": False},
            {"word": "child", "meaning": "小孩", "mastered": False},
            {"word": "friend", "meaning": "朋友", "mastered": False},
            {"word": "boy", "meaning": "男孩", "mastered": False},
            {"word": "girl", "meaning": "女孩", "mastered": False},
            {"word": "man", "meaning": "男人", "mastered": False},
            {"word": "woman", "meaning": "女人", "mastered": False},
            {"word": "baby", "meaning": "婴儿", "mastered": False},
            {"word": "dog", "meaning": "小狗", "mastered": False},
            {"word": "cat", "meaning": "小猫", "mastered": False},
            {"word": "bird", "meaning": "小鸟", "mastered": False},
            {"word": "tiger", "meaning": "老虎", "mastered": False},
            {"word": "lion", "meaning": "狮子", "mastered": False},
            {"word": "panda", "meaning": "熊猫", "mastered": False},
            {"word": "monkey", "meaning": "猴子", "mastered": False},
            {"word": "rabbit", "meaning": "兔子", "mastered": False},
            {"word": "mouse", "meaning": "老鼠", "mastered": False},
            {"word": "butterfly", "meaning": "蝴蝶", "mastered": False},
            {"word": "ant", "meaning": "蚂蚁", "mastered": False},
            {"word": "bee", "meaning": "蜜蜂", "mastered": False},
            {"word": "run", "meaning": "奔跑", "mastered": False},
            {"word": "walk", "meaning": "走路", "mastered": False},
            {"word": "jump", "meaning": "跳跃", "mastered": False},
            {"word": "eat", "meaning": "吃", "mastered": False},
            {"word": "drink", "meaning": "喝", "mastered": False},
            {"word": "sleep", "meaning": "睡觉", "mastered": False},
            {"word": "read", "meaning": "阅读", "mastered": False},
            {"word": "write", "meaning": "书写", "mastered": False},
            {"word": "draw", "meaning": "画画", "mastered": False},
            {"word": "sing", "meaning": "唱歌", "mastered": False},
            {"word": "dance", "meaning": "跳舞", "mastered": False},
            {"word": "happy", "meaning": "开心的", "mastered": False},
            {"word": "sad", "meaning": "难过的", "mastered": False},
            {"word": "angry", "meaning": "生气的", "mastered": False},
            {"word": "tired", "meaning": "疲惫的", "mastered": False},
            {"word": "hungry", "meaning": "饥饿的", "mastered": False},
            {"word": "full", "meaning": "饱的", "mastered": False},
            {"word": "hot", "meaning": "炎热的", "mastered": False},
            {"word": "cold", "meaning": "寒冷的", "mastered": False},
            {"word": "big", "meaning": "大的", "mastered": False},
            {"word": "small", "meaning": "小的", "mastered": False},
            {"word": "long", "meaning": "长的", "mastered": False},
            {"word": "short", "meaning": "短的；矮的", "mastered": False},
            {"word": "fast", "meaning": "快速的", "mastered": False},
            {"word": "slow", "meaning": "缓慢的", "mastered": False},
            {"word": "new", "meaning": "新的", "mastered": False},
            {"word": "old", "meaning": "旧的；年老的", "mastered": False},
            {"word": "good", "meaning": "好的", "mastered": False},
            {"word": "bad", "meaning": "坏的", "mastered": False},
            {"word": "many", "meaning": "许多的", "mastered": False},
            {"word": "few", "meaning": "少量的", "mastered": False},
            {"word": "today", "meaning": "今天", "mastered": False},
            {"word": "yesterday", "meaning": "昨天", "mastered": False},
            {"word": "tomorrow", "meaning": "明天", "mastered": False},
            {"word": "morning", "meaning": "早上", "mastered": False},
            {"word": "afternoon", "meaning": "下午", "mastered": False},
            {"word": "evening", "meaning": "傍晚", "mastered": False},
            {"word": "night", "meaning": "夜晚", "mastered": False},
            {"word": "week", "meaning": "星期", "mastered": False},
            {"word": "month", "meaning": "月份", "mastered": False},
            {"word": "year", "meaning": "年份", "mastered": False},
            {"word": "Monday", "meaning": "周一", "mastered": False},
            {"word": "Tuesday", "meaning": "周二", "mastered": False},
            {"word": "Wednesday", "meaning": "周三", "mastered": False},
            {"word": "Thursday", "meaning": "周四", "mastered": False},
            {"word": "Friday", "meaning": "周五", "mastered": False},
            {"word": "Saturday", "meaning": "周六", "mastered": False},
            {"word": "Sunday", "meaning": "周日", "mastered": False}
        ]

    def reset_word_library(self):
        lib = self.get_full_word_lib()
        self.word_list = lib
        self.save_words(lib)
        self.current_index = 0
        self.show_meaning = False
        self.refresh_word_display()
        messagebox.showinfo("重置成功", "已恢复内置100个基础单词！")

    def load_words(self):
        if os.path.exists(WORD_FILE):
            try:
                with open(WORD_FILE, "r", encoding="utf-8") as f:
                    return json.load(f)
            except:
                return self.get_full_word_lib()
        else:
            data = self.get_full_word_lib()
            self.save_words(data)
            return data

    def save_words(self, data=None):
        save_data = data if data else self.word_list
        with open(WORD_FILE, "w", encoding="utf-8") as f:
            json.dump(save_data, f, ensure_ascii=False, indent=2)

    def create_widgets(self):
        frame_top = ttk.Frame(self.root, padding=10)
        frame_top.pack(fill="x")
        self.label_progress = ttk.Label(frame_top, text="进度：0/0", font=("", 11))
        self.label_progress.pack(side="left")
        self.label_master = ttk.Label(frame_top, text="已熟记：0个", font=("", 11))
        self.label_master.pack(side="right")

        frame_word = tk.Frame(self.root, bg="#f0f8ff", width=480, height=220)
        frame_word.pack(pady=10, padx=20, fill="both")
        frame_word.pack_propagate(False)

        self.label_word = tk.Label(
            frame_word, text="", font=("Arial", 32, "bold"), bg="#f0f8ff", fg="#222222"
        )
        self.label_word.pack(pady=(40, 15))
        self.label_meaning = tk.Label(
            frame_word, text="", font=("", 16), bg="#f0f8ff", fg="#0066cc"
        )
        self.label_meaning.pack()

        frame_btn1 = ttk.Frame(self.root, padding=5)
        frame_btn1.pack()
        # 修复grid语法
        ttk.Button(frame_btn1, text="上一个", command=self.prev_word, width=10).grid(row=0, column=0, padx=6)
        ttk.Button(frame_btn1, text="显示/隐藏释义", command=self.toggle_meaning, width=12).grid(row=0, column=1, padx=6)
        ttk.Button(frame_btn1, text="下一个", command=self.next_word, width=10).grid(row=0, column=2, padx=6)

        frame_btn2 = ttk.Frame(self.root, padding=8)
        frame_btn2.pack()
        ttk.Button(frame_btn2, text="标记已熟记", command=self.mark_master, width=12).grid(row=0, column=0, padx=4)
        ttk.Button(frame_btn2, text="添加新单词", command=self.add_new_word, width=12).grid(row=0, column=1, padx=4)
        ttk.Button(frame_btn2, text="重置全部词库", command=self.reset_word_library, width=12).grid(row=0, column=2, padx=4)

    def refresh_word_display(self):
        total = len(self.word_list)
        master_count = sum(1 for i in self.word_list if i["mastered"])
        self.label_progress.config(text=f"进度：{self.current_index+1}/{total}")
        self.label_master.config(text=f"已熟记：{master_count}个")
        if total == 0:
            self.label_word.config(text="暂无单词")
            self.label_meaning.config(text="")
            return
        curr = self.word_list[self.current_index]
        self.label_word.config(text=curr["word"], fg="#888888" if curr["mastered"] else "#222222")
        self.label_meaning.config(text=curr["meaning"] if self.show_meaning else "???")

    def toggle_meaning(self):
        self.show_meaning = not self.show_meaning
        self.refresh_word_display()

    def prev_word(self):
        if not self.word_list:
            return
        self.current_index = (self.current_index - 1) % len(self.word_list)
        self.show_meaning = False
        self.refresh_word_display()

    def next_word(self):
        if not self.word_list:
            return
        self.current_index = (self.current_index + 1) % len(self.word_list)
        self.show_meaning = False
        self.refresh_word_display()

    def mark_master(self):
        if not self.word_list:
            return
        self.word_list[self.current_index]["mastered"] = not self.word_list[self.current_index]["mastered"]
        self.save_words()
        self.refresh_word_display()

    def add_new_word(self):
        w = simpledialog.askstring("新增单词", "输入英文单词：")
        if not w or not w.strip():
            return
        m = simpledialog.askstring("中文释义", "输入中文释义：")
        if not m or not m.strip():
            messagebox.showwarning("警告", "释义不能为空")
            return
        self.word_list.append({"word": w.strip(), "meaning": m.strip(), "mastered": False})
        self.save_words()
        messagebox.showinfo("完成", f"{w} 添加成功")
        self.refresh_word_display()

if __name__ == "__main__":
    root = tk.Tk()
    app = WordReciteApp(root)
    root.mainloop()