import tkinter as tk
from tkinter import messagebox, simpledialog
import random
import os

# 单词文件保存路径
WORD_FILE = "words.txt"

class WordReciteApp:
    def __init__(self, root):
        self.root = root
        self.root.title("英语单词背诵小程序")
        self.root.geometry("520x380")
        self.root.resizable(False, False)

        # 单词列表 [(英文,中文,掌握标记)]
        self.word_list = []
        self.current_index = 0
        self.is_show_chinese = False  # 是否显示中文

        # 加载单词
        self.load_words()

        # ============ 界面组件 ============
        # 单词显示区域
        self.label_en = tk.Label(root, text="English Word", font=("Arial", 26, "bold"), fg="#222222")
        self.label_en.pack(pady=25)

        self.label_cn = tk.Label(root, text="中文释义", font=("SimHei", 18), fg="#0066aa")
        self.label_cn.pack(pady=8)

        # 按钮容器
        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=20)

        tk.Button(frame_btn, text="显示/隐藏释义", width=12, command=self.toggle_chinese).grid(row=0, column=0, padx=6, pady=6)
        tk.Button(frame_btn, text="上一个", width=10, command=self.prev_word).grid(row=0, column=1, padx=6, pady=6)
        tk.Button(frame_btn, text="下一个/随机", width=12, command=self.next_word).grid(row=0, column=2, padx=6, pady=6)

        frame_btn2 = tk.Frame(root)
        frame_btn2.pack(pady=5)
        tk.Button(frame_btn2, text="✅标记已掌握", width=12, bg="#90ee90", command=self.master_word).grid(row=0, column=0, padx=6)
        tk.Button(frame_btn2, text="❌标记未掌握", width=12, bg="#ffb6b6", command=self.unmaster_word).grid(row=0, column=1, padx=6)

        frame_btn3 = tk.Frame(root)
        frame_btn3.pack(pady=15)
        tk.Button(frame_btn3, text="➕添加新单词", width=12, command=self.add_word).grid(row=0, column=0, padx=6)
        tk.Button(frame_btn3, text="🗑️删除当前单词", width=12, command=self.del_word).grid(row=0, column=1, padx=6)

        # 底部状态信息
        self.status_label = tk.Label(root, text="", font=("SimHei", 10), fg="#555555")
        self.status_label.pack()

        # 初始化显示第一个单词
        self.refresh_display()

    # 从文件加载单词
    def load_words(self):
        self.word_list = []
        if os.path.exists(WORD_FILE):
            with open(WORD_FILE, "r", encoding="utf-8") as f:
                lines = f.readlines()
                for line in lines:
                    line = line.strip()
                    if not line or "|" not in line:
                        continue
                    en, cn, flag = line.split("|")
                    self.word_list.append([en.strip(), cn.strip(), int(flag)])
        if not self.word_list:
            # 默认测试单词
            self.word_list = [
                ["apple", "苹果", 0],
                ["banana", "香蕉", 0],
                ["computer", "电脑", 0],
                ["dream", "梦想", 0],
                ["freedom", "自由", 0]
            ]
            self.save_words()

    # 保存单词到文件
    def save_words(self):
        with open(WORD_FILE, "w", encoding="utf-8") as f:
            for en, cn, flag in self.word_list:
                f.write(f"{en}|{cn}|{flag}\n")

    # 刷新界面文字
    def refresh_display(self):
        if len(self.word_list) == 0:
            self.label_en.config(text="暂无单词，请添加！")
            self.label_cn.config(text="")
            self.status_label.config(text="单词总数：0")
            return

        en, cn, flag = self.word_list[self.current_index]
        self.label_en.config(text=en)
        if self.is_show_chinese:
            self.label_cn.config(text=cn)
        else:
            self.label_cn.config(text="???点击按钮显示释义???")

        total = len(self.word_list)
        master_count = sum(1 for w in self.word_list if w[2]==1)
        self.status_label.config(text=f"第{self.current_index+1}/{total}  | 已掌握：{master_count}个")

    # 切换显示中文
    def toggle_chinese(self):
        self.is_show_chinese = not self.is_show_chinese
        self.refresh_display()

    # 上一个单词
    def prev_word(self):
        if len(self.word_list) == 0:
            return
        self.is_show_chinese = False
        self.current_index -= 1
        if self.current_index < 0:
            self.current_index = len(self.word_list)-1
        self.refresh_display()

    # 下一个/随机单词
    def next_word(self):
        if len(self.word_list) == 0:
            return
        self.is_show_chinese = False
        # 随机跳转
        self.current_index = random.randint(0, len(self.word_list)-1)
        self.refresh_display()

    # 标记掌握
    def master_word(self):
        if len(self.word_list) == 0:
            return
        self.word_list[self.current_index][2] = 1
        self.save_words()
        self.refresh_display()
        messagebox.showinfo("提示", "标记为【已掌握】！")

    # 标记未掌握
    def unmaster_word(self):
        if len(self.word_list) == 0:
            return
        self.word_list[self.current_index][2] = 0
        self.save_words()
        self.refresh_display()
        messagebox.showinfo("提示", "标记为【未掌握】！")

    # 添加单词
    def add_word(self):
        en = simpledialog.askstring("添加单词", "输入英文单词：")
        if not en:
            return
        cn = simpledialog.askstring("添加单词", "输入中文释义：")
        if not cn:
            return
        self.word_list.append([en, cn, 0])
        self.save_words()
        self.refresh_display()
        messagebox.showinfo("成功", f"单词 {en} 添加完成！")

    # 删除当前单词
    def del_word(self):
        if len(self.word_list) == 0:
            return
        word_en = self.word_list[self.current_index][0]
        ok = messagebox.askyesno("确认删除", f"确定删除单词：{word_en} ?")
        if ok:
            self.word_list.pop(self.current_index)
            if self.current_index >= len(self.word_list) and len(self.word_list)>0:
                self.current_index = len(self.word_list)-1
            self.save_words()
            self.is_show_chinese = False
            self.refresh_display()

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