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

# 单词存储文件
WORD_FILE = "words.txt"

class WordReciteApp:
    def __init__(self, root):
        self.root = root
        self.root.title("英语单词背诵助手")
        self.root.geometry("520x400")

        # 单词列表 格式：[[单词,释义,是否记住], ...]
        self.word_list = []
        self.load_words()

        # 当前展示单词下标
        self.current_idx = -1

        # 界面布局
        self.create_widgets()

    # 从文件加载单词
    def load_words(self):
        if not os.path.exists(WORD_FILE):
            return
        with open(WORD_FILE, "r", encoding="utf-8") as f:
            lines = f.readlines()
        for line in lines:
            line = line.strip()
            if not line:
                continue
            parts = line.split("|")
            if len(parts) == 3:
                word, mean, master = parts
                self.word_list.append([word, mean, int(master)])

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

    # 构建UI组件
    def create_widgets(self):
        # 输入区域
        frame_input = tk.Frame(self.root, pady=10)
        frame_input.pack(fill="x", padx=20)

        tk.Label(frame_input, text="单词：").grid(row=0, column=0, sticky="w")
        self.entry_word = tk.Entry(frame_input, width=18)
        self.entry_word.grid(row=0, column=1, padx=5)

        tk.Label(frame_input, text="释义：").grid(row=0, column=2, sticky="w")
        self.entry_mean = tk.Entry(frame_input, width=22)
        self.entry_mean.grid(row=0, column=3, padx=5)

        btn_add = tk.Button(frame_input, text="添加单词", command=self.add_word)
        btn_add.grid(row=0, column=4, padx=8)

        # 单词显示区域
        frame_show = tk.Frame(self.root, pady=15)
        frame_show.pack()

        self.label_word = tk.Label(frame_show, text="点击随机背诵", font=("微软雅黑", 20, "bold"), width=25)
        self.label_word.pack()

        self.label_mean = tk.Label(frame_show, text="", font=("微软雅黑", 14), fg="#555555", wraplength=480)
        self.label_mean.pack(pady=8)

        # 功能按钮区
        frame_btn = tk.Frame(self.root, pady=10)
        frame_btn.pack()

        tk.Button(frame_btn, text="随机下一个", width=10, command=self.random_next).grid(row=0, column=0, padx=4)
        tk.Button(frame_btn, text="显示/隐藏释义", width=12, command=self.toggle_mean).grid(row=0, column=1, padx=4)
        tk.Button(frame_btn, text="标记已掌握", width=10, command=self.mark_master).grid(row=0, column=2, padx=4)
        tk.Button(frame_btn, text="删除本单词", width=10, command=self.delete_word).grid(row=0, column=3, padx=4)

        # 统计信息
        self.label_info = tk.Label(self.root, text=f"总单词：{len(self.word_list)} | 已掌握：{sum(i[2] for i in self.word_list)}", fg="#222222")
        self.label_info.pack(pady=10)

        # 标记释义是否可见
        self.mean_visible = False

    # 添加单词
    def add_word(self):
        w = self.entry_word.get().strip()
        m = self.entry_mean.get().strip()
        if not w or not m:
            messagebox.showwarning("提示", "单词和释义都不能为空！")
            return
        self.word_list.append([w, m, 0])
        self.save_words()
        # 清空输入框
        self.entry_word.delete(0, tk.END)
        self.entry_mean.delete(0, tk.END)
        self.update_info()
        messagebox.showinfo("成功", "单词添加完毕！")

    # 随机抽取单词
    def random_next(self):
        if not self.word_list:
            messagebox.showinfo("提示", "词库为空，请先添加单词")
            return
        self.current_idx = random.randint(0, len(self.word_list)-1)
        word_item = self.word_list[self.current_idx]
        self.label_word.config(text=word_item[0])
        self.label_mean.config(text="")
        self.mean_visible = False

    # 切换释义显示隐藏
    def toggle_mean(self):
        if self.current_idx == -1:
            messagebox.showwarning("提示", "请先随机抽取单词")
            return
        if self.mean_visible:
            self.label_mean.config(text="")
            self.mean_visible = False
        else:
            mean_text = self.word_list[self.current_idx][1]
            self.label_mean.config(text=f"释义：{mean_text}")
            self.mean_visible = True

    # 标记已掌握
    def mark_master(self):
        if self.current_idx == -1:
            messagebox.showwarning("提示", "请先随机抽取单词")
            return
        self.word_list[self.current_idx][2] = 1
        self.save_words()
        self.update_info()
        messagebox.showinfo("完成", "该单词标记为已掌握！")

    # 删除当前单词
    def delete_word(self):
        if self.current_idx == -1:
            messagebox.showwarning("提示", "请先随机抽取单词")
            return
        del self.word_list[self.current_idx]
        self.save_words()
        self.label_word.config(text="点击随机背诵")
        self.label_mean.config(text="")
        self.current_idx = -1
        self.mean_visible = False
        self.update_info()
        messagebox.showinfo("删除", "当前单词已移除")

    # 更新底部统计文字
    def update_info(self):
        total = len(self.word_list)
        mastered = sum(item[2] for item in self.word_list)
        self.label_info.config(text=f"总单词：{total} | 已掌握：{mastered}")

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