import random
import tkinter as tk
from tkinter import ttk, filedialog, messagebox


class RandomNameCall:
    def __init__(self, window):
        self.window = window
        self.window.title("🎲随机抽签点名器")
        self.window.geometry("550x320")
        self.window.resizable(False, False)

        # 名单数据
        self.name_list = ["张三", "李四", "王五", "赵六", "钱七", "孙八"]
        self.no_repeat_pool = self.name_list.copy()

        # 显示名字大标签
        self.display_label = ttk.Label(
            window,
            text="点击按钮开始抽签",
            font=("SimHei", 36, "bold")
        )
        self.display_label.pack(pady=40)

        # 按钮区域
        btn_frame = ttk.Frame(window)
        btn_frame.pack()

        ttk.Button(btn_frame, text="可重复抽签", command=self.pick_repeat, width=12).grid(row=0, column=0, padx=6)
        ttk.Button(btn_frame, text="不重复抽签", command=self.pick_no_repeat, width=12).grid(row=0, column=1, padx=6)
        ttk.Button(btn_frame, text="重置抽签池", command=self.reset_pool, width=12).grid(row=0, column=2, padx=6)

        bottom_frame = ttk.Frame(window)
        bottom_frame.pack(pady=20)
        ttk.Button(bottom_frame, text="导入TXT名单", command=self.load_txt).grid(row=0, column=0, padx=8)
        ttk.Button(bottom_frame, text="退出", command=window.quit).grid(row=0, column=1, padx=8)

        # 底部状态文字
        self.status = ttk.Label(window, text=f"总人数：{len(self.name_list)}")
        self.status.pack()

    def pick_repeat(self):
        """可以重复抽到同一个人"""
        name = random.choice(self.name_list)
        self.display_label.config(text=f"🎉 {name}")
        self.status.config(text=f"总人数：{len(self.name_list)}｜允许重复抽取")

    def pick_no_repeat(self):
        """抽过就不再抽"""
        if not self.no_repeat_pool:
            messagebox.showinfo("提示", "所有人都抽完啦，请重置！")
            return
        name = random.choice(self.no_repeat_pool)
        self.no_repeat_pool.remove(name)
        self.display_label.config(text=f"🎉 {name}")
        self.status.config(text=f"剩余未抽:{len(self.no_repeat_pool)} / {len(self.name_list)}")

    def reset_pool(self):
        """重置不重复池子"""
        self.no_repeat_pool = self.name_list.copy()
        self.display_label.config(text="已重置，请开始抽签")
        self.status.config(text=f"总人数：{len(self.name_list)}")

    def load_txt(self):
        """导入txt文本，一行一个名字"""
        file_path = filedialog.askopenfilename(
            filetypes=[("文本文件", "*.txt")],
            title="选择名单txt文件，一行一个名字"
        )
        if not file_path:
            return
        try:
            with open(file_path, "r", encoding="utf-8") as f:
                lines = f.readlines()
            new_names = [line.strip() for line in lines if line.strip()]
            if len(new_names) == 0:
                messagebox.showwarning("警告", "文件没有读到名字！")
                return
            self.name_list = new_names
            self.no_repeat_pool = self.name_list.copy()
            self.display_label.config(text="导入成功！")
            self.status.config(text=f"已导入，总人数：{len(self.name_list)}")
        except Exception as e:
            messagebox.showerror("错误", f"读取失败：{str(e)}")


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