import tkinter as tk
import random

# ========================
# 主题配置
# ========================
themes = {
    "🌸 樱花粉": {"bg": "#FFE4E9", "fg": "#D81B60", "btn": "#F8BBD0"},
    "💙 天空蓝": {"bg": "#E3F2FD", "fg": "#1565C0", "btn": "#90CAF9"},
    "🧡 蜜桔橙": {"bg": "#FFF3E0", "fg": "#EF6C00", "btn": "#FFCC80"},
    "💚 抹茶绿": {"bg": "#E8F5E9", "fg": "#2E7D32", "btn": "#A5D6A7"},
    "💜 梦幻紫": {"bg": "#F3E5F5", "fg": "#7B1FA2", "btn": "#CE93D8"},
    "🍬 糖果色": {"bg": "#FCE4EC", "fg": "#C2185B", "btn": "#F48FB1"},
}

# ========================
# 全局变量
# ========================
name_list = ["小明", "小红", "小刚", "小丽", "小强", "小芳"]
history_list = []
is_running = False

# ========================
# 换肤函数（✅ 所有控件都已提前创建）
# ========================
def apply_theme(name):
    t = themes[name]

    root.configure(bg=t["bg"])
    frame_top.configure(bg=t["bg"])
    frame_center.configure(bg=t["bg"])
    frame_bottom.configure(bg=t["bg"])
    frame_history.configure(bg=t["bg"])

    label_title.configure(bg=t["bg"], fg=t["fg"])
    label_result.configure(bg=t["bg"], fg=t["fg"])
    label_history_title.configure(bg=t["bg"], fg=t["fg"])

    btn_start.configure(bg=t["btn"], fg=t["fg"])
    entry_name.configure(bg="white", fg="#333")

    for btn in theme_buttons:
        btn.configure(bg=t["btn"], fg=t["fg"])

# ========================
# 功能函数
# ========================
def add_name():
    name = entry_name.get().strip()
    if name and name not in name_list:
        name_list.append(name)
        update_listbox()
    entry_name.delete(0, tk.END)

def remove_name():
    sel = listbox.curselection()
    if sel:
        name_list.pop(sel[0])
        update_listbox()

def reset_names():
    global name_list
    name_list = ["小明", "小红", "小刚", "小丽", "小强", "小芳"]
    update_listbox()

def update_listbox():
    listbox.delete(0, tk.END)
    for n in name_list:
        listbox.insert(tk.END, n)

def start_pick():
    global is_running
    if not name_list:
        return
    is_running = True
    roll()

def roll():
    if is_running:
        label_result.config(text=random.choice(name_list))
        root.after(80, roll)

def stop_pick():
    global is_running
    is_running = False
    result = label_result.cget("text")
    if result:
        history_list.append(result)
        listbox_history.insert(tk.END, result)

def clear_history():
    history_list.clear()
    listbox_history.delete(0, tk.END)

# ========================
# 创建窗口
# ========================
root = tk.Tk()
root.title("🎲 卡通随机点名器")
root.geometry("720x520")
root.resizable(False, False)

# ========================
# 顶部：标题 + 换肤按钮
# ========================
frame_top = tk.Frame(root)
frame_top.pack(fill="x", pady=10)

label_title = tk.Label(
    frame_top,
    text="🎀 卡通随机点名器 🎀",
    font=("Comic Sans MS", 22, "bold")
)
label_title.pack()

theme_buttons = []
theme_frame = tk.Frame(frame_top)
theme_frame.pack(pady=5)

for name in themes:
    b = tk.Button(
        theme_frame, text=name,
        font=("Comic Sans MS", 9),
        command=lambda n=name: apply_theme(n)
    )
    b.pack(side="left", padx=3)
    theme_buttons.append(b)

# ========================
# 中间区域
# ========================
frame_center = tk.Frame(root)
frame_center.pack(fill="both", expand=True, padx=10)

# 左侧：名单管理
frame_left = tk.Frame(frame_center)
frame_left.pack(side="left", fill="y", padx=5)

tk.Label(frame_left, text="📋 名单", font=("Comic Sans MS", 12)).pack()
listbox = tk.Listbox(frame_left, width=15, font=("Comic Sans MS", 11))
listbox.pack()

entry_name = tk.Entry(frame_left, font=("Comic Sans MS", 11), justify="center")
entry_name.pack(pady=5)

tk.Button(frame_left, text="➕ 添加", command=add_name).pack(fill="x")
tk.Button(frame_left, text="➖ 删除", command=remove_name).pack(fill="x", pady=2)
tk.Button(frame_left, text="🔄 重置", command=reset_names).pack(fill="x")

# 中间：抽签区
frame_middle = tk.Frame(frame_center)
frame_middle.pack(side="left", fill="both", expand=True)

label_result = tk.Label(
    frame_middle,
    text="等待抽签~",
    font=("Comic Sans MS", 26, "bold"),
    width=16,
    height=3
)
label_result.pack(pady=30)

btn_start = tk.Button(
    frame_middle,
    text="🎲 开始抽签",
    font=("Comic Sans MS", 14, "bold"),
    width=18,
    command=lambda: [start_pick(), btn_start.config(text="🛑 停止")]
)
btn_start.pack(pady=5)

tk.Button(
    frame_middle,
    text="🛑 停止",
    font=("Comic Sans MS", 12),
    width=18,
    command=lambda: [stop_pick(), btn_start.config(text="🎲 开始抽签")]
).pack()

# 右侧：历史记录（✅ 关键：先创建！）
frame_history = tk.Frame(frame_center)
frame_history.pack(side="right", fill="y", padx=5)

label_history_title = tk.Label(
    frame_history,
    text="📜 抽取记录",
    font=("Comic Sans MS", 12)
)
label_history_title.pack()

listbox_history = tk.Listbox(
    frame_history, width=15, font=("Comic Sans MS", 11)
)
listbox_history.pack()

tk.Button(
    frame_history,
    text="🗑️ 清空记录",
    command=clear_history
).pack(pady=5)

# ========================
# 底部
# ========================
frame_bottom = tk.Frame(root)
frame_bottom.pack(fill="x", pady=5)

tk.Label(
    frame_bottom,
    text="点击主题按钮即可换肤 ✨",
    font=("Comic Sans MS", 10)
).pack()

# ========================
# 初始化
# ========================
update_listbox()
apply_theme("🌸 樱花粉")

root.mainloop()