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

class RandomNamePicker:
    def __init__(self, root):
        self.root = root
        self.root.title("随机点名抽签器")
        self.root.geometry("560x480")
        self.root.resizable(False, False)

        # 初始名单
        self.all_names = [
            "张三", "李四", "王五", "赵六",
            "小明", "小红", "小刚", "小美",
            "小天", "小雨"
        ]
        self.remain_names = self.all_names.copy()
        self.is_rolling = False

        # 顶部显示结果
        self.display_text = tk.StringVar(value="点击开始抽取")
        label_show = tk.Label(root, textvariable=self.display_text,
                              font=("微软雅黑", 40, "bold"), fg="#c0392b")
        label_show.pack(pady=30)

        # 抽取数量 + 不重复复选框
        frame_setting = tk.Frame(root)
        frame_setting.pack()

        ttk.Label(frame_setting, text="一次抽取人数：").grid(row=0, column=0)
        self.num_var = tk.StringVar(value="1")
        spin_num = ttk.Spinbox(frame_setting, from_=1, to=20, width=6, textvariable=self.num_var)
        spin_num.grid(row=0, column=1, padx=8)

        self.no_repeat_var = tk.BooleanVar()
        check_no_repeat = ttk.Checkbutton(frame_setting, text="不重复抽取", variable=self.no_repeat_var)
        check_no_repeat.grid(row=0, column=2, padx=10)

        # 按钮区域
        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=15)

        self.btn_start = ttk.Button(frame_btn, text="开始抽取", command=self.start_roll)
        self.btn_start.grid(row=0, column=0, padx=8)
        self.btn_stop = ttk.Button(frame_btn, text="停止抽取", command=self.stop_roll, state="disabled")
        self.btn_stop.grid(row=0, column=1, padx=8)
        ttk.Button(frame_btn, text="重置名单", command=self.reset_list).grid(row=0, column=2, padx=8)

        # 名单编辑区
        ttk.Label(root, text="名单（一行一个姓名）").pack()
        self.text_area = tk.Text(root, width=55, height=8, font=("微软雅黑", 10))
        self.text_area.pack()
        self.update_textbox()
        ttk.Button(root, text="保存名单", command=self.save_name_list).pack(pady=6)

    def update_textbox(self):
        self.text_area.delete(1.0, tk.END)
        self.text_area.insert(tk.END, "\n".join(self.all_names))

    def save_name_list(self):
        content = self.text_area.get(1.0, tk.END).strip()
        name_lines = content.splitlines()
        self.all_names = [name.strip() for name in name_lines if name.strip()]
        self.reset_list()
        messagebox.showinfo("提示", f"名单保存完成，共 {len(self.all_names)} 人")

    def reset_list(self):
        self.remain_names = self.all_names.copy()
        self.display_text.set("名单已重置")

    def start_roll(self):
        if self.is_rolling:
            return
        if not self.all_names:
            messagebox.showwarning("警告", "名单不能为空！")
            return

        self.is_rolling = True
        self.btn_start.config(state="disabled")
        self.btn_stop.config(state="normal")
        self.rolling_loop()

    def rolling_loop(self):
        if not self.is_rolling:
            return
        # 滚动预览名字
        temp_name = random.choice(self.all_names)
        self.display_text.set(temp_name)
        self.root.after(60, self.rolling_loop)

    def stop_roll(self):
        self.is_rolling = False
        self.btn_start.config(state="normal")
        self.btn_stop.config(state="disabled")

        try:
            pick_count = int(self.num_var.get())
        except ValueError:
            pick_count = 1

        if self.no_repeat_var.get():
            source = self.remain_names
        else:
            source = self.all_names

        if len(source) == 0:
            messagebox.showinfo("提示", "所有人已经抽取完毕，请重置名单！")
            return
        if pick_count > len(source):
            pick_count = len(source)

        result = random.sample(source, pick_count)
        self.display_text.set(" 、".join(result))

        if self.no_repeat_var.get():
            for name in result:
                self.remain_names.remove(name)

if __name__ == "__main__":
    window = tk.Tk()
    app = RandomNamePicker(window)
    window.mainloop()