import tkinter as tk
from tkinter import messagebox, simpledialog
import random
import threading
import time

class RandomPicker:
    def __init__(self, root):
        self.root = root
        self.root.title("🎲 随机点名器")
        self.root.geometry("500x600")
        self.root.resizable(False, False)
        self.root.configure(bg="#2c3e50")
        
        # 默认名单
        self.names = [
            "张三", "李四", "王五", "赵六", "陈七",
            "刘八", "周九", "吴十", "郑一", "孙二"
        ]
        
        self.is_running = False
        self.current_name = ""
        self.history = []  # 已抽中记录
        
        self.create_widgets()

    def create_widgets(self):
        # 标题
        title_label = tk.Label(
            self.root,
            text="🎲 随机点名器",
            font=("微软雅黑", 24, "bold"),
            fg="#ecf0f1",
            bg="#2c3e50"
        )
        title_label.pack(pady=20)
        
        # 显示区域
        self.display_frame = tk.Frame(
            self.root,
            bg="#34495e",
            relief="sunken",
            bd=3
        )
        self.display_frame.pack(pady=20, padx=30, fill="x")
        
        self.name_label = tk.Label(
            self.display_frame,
            text="点击开始",
            font=("微软雅黑", 36, "bold"),
            fg="#e74c3c",
            bg="#34495e",
            height=3
        )
        self.name_label.pack(fill="x", pady=10)
        
        # 按钮区域
        btn_frame = tk.Frame(self.root, bg="#2c3e50")
        btn_frame.pack(pady=15)
        
        self.start_btn = tk.Button(
            btn_frame,
            text="▶️ 开始抽签",
            font=("微软雅黑", 12, "bold"),
            bg="#27ae60",
            fg="white",
            width=12,
            height=2,
            cursor="hand2",
            command=self.toggle_start
        )
        self.start_btn.pack(side="left", padx=10)
        
        self.edit_btn = tk.Button(
            btn_frame,
            text="📝 编辑名单",
            font=("微软雅黑", 12),
            bg="#3498db",
            fg="white",
            width=10,
            height=2,
            cursor="hand2",
            command=self.edit_names
        )
        self.edit_btn.pack(side="left", padx=10)
        
        self.clear_btn = tk.Button(
            btn_frame,
            text="🗑️ 清空历史",
            font=("微软雅黑", 12),
            bg="#e74c3c",
            fg="white",
            width=10,
            height=2,
            cursor="hand2",
            command=self.clear_history
        )
        self.clear_btn.pack(side="left", padx=10)
        
        # 名单预览
        list_frame = tk.Frame(self.root, bg="#2c3e50")
        list_frame.pack(pady=10, fill="both", expand=True, padx=30)
        
        tk.Label(
            list_frame,
            text="📋 当前名单",
            font=("微软雅黑", 12, "bold"),
            fg="#ecf0f1",
            bg="#2c3e50"
        ).pack(anchor="w")
        
        # 名单显示区域
        self.list_text = tk.Text(
            list_frame,
            height=8,
            font=("微软雅黑", 10),
            bg="#34495e",
            fg="#ecf0f1",
            relief="flat",
            wrap="word"
        )
        self.list_text.pack(fill="both", expand=True, pady=5)
        self.list_text.insert("end", "\n".join(self.names))
        self.list_text.config(state="disabled")
        
        # 历史记录
        history_frame = tk.Frame(self.root, bg="#2c3e50")
        history_frame.pack(pady=10, fill="x", padx=30)
        
        tk.Label(
            history_frame,
            text="📜 抽签历史",
            font=("微软雅黑", 12, "bold"),
            fg="#ecf0f1",
            bg="#2c3e50"
        ).pack(anchor="w")
        
        self.history_label = tk.Label(
            history_frame,
            text="暂无记录",
            font=("微软雅黑", 10),
            fg="#bdc3c7",
            bg="#2c3e50",
            anchor="w",
            justify="left"
        )
        self.history_label.pack(fill="x", pady=5)

    def toggle_start(self):
        if self.is_running:
            self.stop_picking()
        else:
            self.start_picking()

    def start_picking(self):
        if len(self.names) == 0:
            messagebox.showwarning("⚠️ 提示", "名单为空，请先编辑名单！")
            return
        
        self.is_running = True
        self.start_btn.config(text="⏹️ 停止", bg="#e74c3c")
        
        # 启动滚动线程
        threading.Thread(target=self.rolling, daemon=True).start()

    def stop_picking(self):
        self.is_running = False
        self.start_btn.config(text="▶️ 开始抽签", bg="#27ae60")

    def rolling(self):
        speed = 0.05  # 初始滚动速度
        min_speed = 0.05
        max_speed = 0.5
        
        # 快速滚动阶段
        for _ in range(30):
            if not self.is_running:
                return
            self.current_name = random.choice(self.names)
            self.root.after(0, self.update_display)
            time.sleep(speed)
        
        # 逐渐减速阶段
        for i in range(20):
            if not self.is_running:
                return
            self.current_name = random.choice(self.names)
            self.root.after(0, self.update_display)
            time.sleep(speed + i * 0.03)
        
        # 最终结果
        if self.is_running:
            self.current_name = random.choice(self.names)
            self.root.after(0, self.update_display)
            self.root.after(0, self.picking_complete)
            self.is_running = False
            self.root.after(0, lambda: self.start_btn.config(text="▶️ 开始抽签", bg="#27ae60"))

    def update_display(self):
        self.name_label.config(text=self.current_name)

    def picking_complete(self):
        self.history.append(self.current_name)
        self.update_history()
        
        # 弹出恭喜窗口
        messagebox.showinfo(
            "🎉 抽中了！",
            f"恭喜 {self.current_name} ！"
        )

    def edit_names(self):
        # 弹出编辑窗口
        edit_window = tk.Toplevel(self.root)
        edit_window.title("📝 编辑名单")
        edit_window.geometry("400x500")
        edit_window.configure(bg="#2c3e50")
        edit_window.transient(self.root)
        edit_window.grab_set()
        
        tk.Label(
            edit_window,
            text="每行一个名字",
            font=("微软雅黑", 10),
            fg="#ecf0f1",
            bg="#2c3e50"
        ).pack(pady=5)
        
        text_area = tk.Text(
            edit_window,
            font=("微软雅黑", 10),
            bg="#34495e",
            fg="#ecf0f1",
            insertbackground="white"
        )
        text_area.pack(fill="both", expand=True, padx=10, pady=5)
        text_area.insert("end", "\n".join(self.names))
        
        def save_names():
            new_names = text_area.get("1.0", "end").strip().split("\n")
            new_names = [name.strip() for name in new_names if name.strip()]
            if len(new_names) == 0:
                messagebox.showwarning("⚠️ 提示", "名单不能为空！")
                return
            self.names = new_names
            self.update_name_list()
            edit_window.destroy()
        
        btn_frame = tk.Frame(edit_window, bg="#2c3e50")
        btn_frame.pack(pady=10)
        
        tk.Button(
            btn_frame,
            text="💾 保存",
            font=("微软雅黑", 10),
            bg="#27ae60",
            fg="white",
            width=10,
            command=save_names
        ).pack(side="left", padx=5)
        
        tk.Button(
            btn_frame,
            text="❌ 取消",
            font=("微软雅黑", 10),
            bg="#95a5a6",
            fg="white",
            width=10,
            command=edit_window.destroy
        ).pack(side="left", padx=5)

    def update_name_list(self):
        self.list_text.config(state="normal")
        self.list_text.delete("1.0", "end")
        self.list_text.insert("end", "\n".join(self.names))
        self.list_text.config(state="disabled")

    def clear_history(self):
        self.history = []
        self.history_label.config(text="暂无记录")


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