import tkinter as tk
from tkinter import ttk, messagebox
import random
import time
from datetime import datetime
import json
import os

class LotteryGame:
    def __init__(self, root):
        self.root = root
        self.root.title("幸运抽签小游戏")
        self.root.geometry("900x700")
        self.root.configure(bg="#f0f8ff")
        
        # 设置图标和标题样式
        self.root.iconbitmap(None)  # 如果没有图标文件，可以使用默认
        
        # 设置窗口居中
        self.center_window(900, 700)
        
        # 初始化数据
        self.prizes = []
        self.participants = []
        self.winners = {}
        self.prize_categories = {}
        
        # 默认奖项
        self.default_prizes = [
            {"name": "特等奖", "quantity": 1, "description": "神秘大礼包", "color": "#FF6B6B"},
            {"name": "一等奖", "quantity": 3, "description": "豪华大礼包", "color": "#4ECDC4"},
            {"name": "二等奖", "quantity": 5, "description": "精美礼品", "color": "#FFD166"},
            {"name": "三等奖", "quantity": 10, "description": "参与礼品", "color": "#06D6A0"},
            {"name": "幸运奖", "quantity": 20, "description": "小礼品", "color": "#118AB2"}
        ]
        
        # 默认参与者
        self.default_participants = [f"参与者{i:03d}" for i in range(1, 101)]
        
        # 设置样式
        self.setup_styles()
        
        # 创建界面
        self.create_widgets()
        
        # 加载默认数据
        self.load_default_data()
        
    def center_window(self, width, height):
        """窗口居中显示"""
        screen_width = self.root.winfo_screenwidth()
        screen_height = self.root.winfo_screenheight()
        x = (screen_width - width) // 2
        y = (screen_height - height) // 2
        self.root.geometry(f"{width}x{height}+{x}+{y}")
        
    def setup_styles(self):
        """设置样式"""
        style = ttk.Style()
        style.theme_use('clam')
        
        # 自定义按钮样式
        style.configure('Lottery.TButton',
                       font=('Microsoft YaHei', 12, 'bold'),
                       padding=10,
                       background='#4A90E2',
                       foreground='white')
        
        style.configure('Success.TButton',
                       font=('Microsoft YaHei', 10, 'bold'),
                       padding=8,
                       background='#28a745',
                       foreground='white')
        
        style.configure('Danger.TButton',
                       font=('Microsoft YaHei', 10, 'bold'),
                       padding=8,
                       background='#dc3545',
                       foreground='white')
        
    def create_widgets(self):
        """创建界面组件"""
        # 创建主框架
        main_frame = ttk.Frame(self.root, padding="20")
        main_frame.pack(fill=tk.BOTH, expand=True)
        
        # 标题
        title_label = tk.Label(main_frame, 
                              text="🎁 幸运抽签小游戏 🎁", 
                              font=('Microsoft YaHei', 28, 'bold'),
                              fg='#2C3E50',
                              bg='#f0f8ff')
        title_label.pack(pady=(0, 20))
        
        # 创建标签页
        self.notebook = ttk.Notebook(main_frame)
        self.notebook.pack(fill=tk.BOTH, expand=True, pady=(0, 20))
        
        # 创建各个标签页
        self.create_setup_tab()
        self.create_lottery_tab()
        self.create_result_tab()
        self.create_history_tab()
        
        # 状态栏
        self.create_status_bar()
        
    def create_setup_tab(self):
        """创建设置标签页"""
        setup_frame = ttk.Frame(self.notebook, padding="20")
        self.notebook.add(setup_frame, text="🎯 设置")
        
        # 创建左右两个框架
        left_frame = ttk.Frame(setup_frame)
        left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 10))
        
        right_frame = ttk.Frame(setup_frame)
        right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=(10, 0))
        
        # 左侧：奖品设置
        prize_frame = ttk.LabelFrame(left_frame, text="🏆 奖品设置", padding="15")
        prize_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 10))
        
        tk.Label(prize_frame, text="奖品名称:", font=('Microsoft YaHei', 10)).grid(row=0, column=0, sticky=tk.W, pady=5)
        self.prize_name = ttk.Entry(prize_frame, width=20, font=('Microsoft YaHei', 10))
        self.prize_name.grid(row=0, column=1, pady=5, padx=(5, 10))
        
        tk.Label(prize_frame, text="奖品数量:", font=('Microsoft YaHei', 10)).grid(row=1, column=0, sticky=tk.W, pady=5)
        self.prize_qty = ttk.Spinbox(prize_frame, from_=1, to=1000, width=18, font=('Microsoft YaHei', 10))
        self.prize_qty.grid(row=1, column=1, pady=5, padx=(5, 10))
        self.prize_qty.set(1)
        
        tk.Label(prize_frame, text="奖品描述:", font=('Microsoft YaHei', 10)).grid(row=2, column=0, sticky=tk.W, pady=5)
        self.prize_desc = ttk.Entry(prize_frame, width=20, font=('Microsoft YaHei', 10))
        self.prize_desc.grid(row=2, column=1, pady=5, padx=(5, 10))
        
        tk.Label(prize_frame, text="奖品颜色:", font=('Microsoft YaHei', 10)).grid(row=3, column=0, sticky=tk.W, pady=5)
        self.color_var = tk.StringVar(value="#4ECDC4")
        color_frame = ttk.Frame(prize_frame)
        color_frame.grid(row=3, column=1, pady=5, sticky=tk.W)
        
        colors = ["#FF6B6B", "#4ECDC4", "#FFD166", "#06D6A0", "#118AB2", "#A663CC", "#FF9F1C"]
        for i, color in enumerate(colors):
            btn = tk.Button(color_frame, bg=color, width=2, height=1, 
                           command=lambda c=color: self.color_var.set(c))
            btn.grid(row=0, column=i, padx=2)
            
        btn_frame = ttk.Frame(prize_frame)
        btn_frame.grid(row=4, column=0, columnspan=2, pady=15)
        
        ttk.Button(btn_frame, text="添加奖品", style='Success.TButton',
                  command=self.add_prize).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="清空奖品", style='Danger.TButton',
                  command=self.clear_prizes).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="使用默认奖品", style='Lottery.TButton',
                  command=self.use_default_prizes).pack(side=tk.LEFT, padx=5)
        
        # 奖品列表
        tk.Label(prize_frame, text="奖品列表:", font=('Microsoft YaHei', 10, 'bold')).grid(row=5, column=0, columnspan=2, sticky=tk.W, pady=(10, 5))
        
        # 创建带滚动条的列表框
        list_frame = ttk.Frame(prize_frame)
        list_frame.grid(row=6, column=0, columnspan=2, sticky=tk.NSEW, pady=(0, 10))
        
        prize_frame.rowconfigure(6, weight=1)
        prize_frame.columnconfigure(1, weight=1)
        
        scrollbar = ttk.Scrollbar(list_frame)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        self.prize_listbox = tk.Listbox(list_frame, height=8, font=('Microsoft YaHei', 10),
                                       yscrollcommand=scrollbar.set, selectmode=tk.SINGLE)
        self.prize_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.config(command=self.prize_listbox.yview)
        
        # 右侧：参与者设置
        participant_frame = ttk.LabelFrame(right_frame, text="👥 参与者设置", padding="15")
        participant_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 10))
        
        tk.Label(participant_frame, text="参与者数量:", font=('Microsoft YaHei', 10)).grid(row=0, column=0, sticky=tk.W, pady=5)
        self.participant_count = ttk.Spinbox(participant_frame, from_=1, to=1000, width=20, font=('Microsoft YaHei', 10))
        self.participant_count.grid(row=0, column=1, pady=5, padx=(5, 10))
        self.participant_count.set(100)
        
        tk.Label(participant_frame, text="姓名前缀:", font=('Microsoft YaHei', 10)).grid(row=1, column=0, sticky=tk.W, pady=5)
        self.prefix_var = tk.StringVar(value="参与者")
        ttk.Entry(participant_frame, textvariable=self.prefix_var, width=20, font=('Microsoft YaHei', 10)).grid(row=1, column=1, pady=5, padx=(5, 10))
        
        tk.Label(participant_frame, text="起始编号:", font=('Microsoft YaHei', 10)).grid(row=2, column=0, sticky=tk.W, pady=5)
        self.start_num = ttk.Spinbox(participant_frame, from_=1, to=1000, width=20, font=('Microsoft YaHei', 10))
        self.start_num.grid(row=2, column=1, pady=5, padx=(5, 10))
        self.start_num.set(1)
        
        btn_frame2 = ttk.Frame(participant_frame)
        btn_frame2.grid(row=3, column=0, columnspan=2, pady=15)
        
        ttk.Button(btn_frame2, text="生成参与者", style='Success.TButton',
                  command=self.generate_participants).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame2, text="导入参与者", style='Lottery.TButton',
                  command=self.import_participants).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame2, text="清空参与者", style='Danger.TButton',
                  command=self.clear_participants).pack(side=tk.LEFT, padx=5)
        
        # 参与者列表
        tk.Label(participant_frame, text="参与者列表 (前20个):", font=('Microsoft YaHei', 10, 'bold')).grid(row=4, column=0, columnspan=2, sticky=tk.W, pady=(10, 5))
        
        list_frame2 = ttk.Frame(participant_frame)
        list_frame2.grid(row=5, column=0, columnspan=2, sticky=tk.NSEW, pady=(0, 10))
        
        participant_frame.rowconfigure(5, weight=1)
        participant_frame.columnconfigure(1, weight=1)
        
        scrollbar2 = ttk.Scrollbar(list_frame2)
        scrollbar2.pack(side=tk.RIGHT, fill=tk.Y)
        
        self.participant_listbox = tk.Listbox(list_frame2, height=8, font=('Microsoft YaHei', 10),
                                             yscrollcommand=scrollbar2.set)
        self.participant_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar2.config(command=self.participant_listbox.yview)
        
        # 底部：控制按钮
        control_frame = ttk.Frame(setup_frame)
        control_frame.pack(fill=tk.X, pady=(10, 0))
        
        ttk.Button(control_frame, text="开始抽奖", style='Lottery.TButton',
                  command=self.start_lottery, width=20).pack(pady=10)
        
    def create_lottery_tab(self):
        """创建抽奖标签页"""
        lottery_frame = ttk.Frame(self.notebook, padding="20")
        self.notebook.add(lottery_frame, text="🎰 抽奖")
        
        # 抽奖显示区域
        display_frame = ttk.Frame(lottery_frame)
        display_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 20))
        
        # 当前奖项显示
        self.current_prize_frame = tk.Frame(display_frame, bg='white', relief=tk.RAISED, bd=2)
        self.current_prize_frame.pack(fill=tk.X, pady=(0, 20))
        
        tk.Label(self.current_prize_frame, text="当前奖项:", 
                font=('Microsoft YaHei', 16, 'bold'), 
                bg='white').pack(pady=10)
        
        self.current_prize_label = tk.Label(self.current_prize_frame, 
                                           text="未设置", 
                                           font=('Microsoft YaHei', 24, 'bold'),
                                           bg='white',
                                           fg='#2C3E50')
        self.current_prize_label.pack(pady=(0, 10))
        
        # 抽奖结果显示区域
        result_display_frame = tk.Frame(display_frame, bg='#f8f9fa', relief=tk.GROOVE, bd=2)
        result_display_frame.pack(fill=tk.BOTH, expand=True)
        
        # 大数字显示
        self.lottery_display = tk.Label(result_display_frame, 
                                       text="???", 
                                       font=('Microsoft YaHei', 48, 'bold'),
                                       bg='#2C3E50',
                                       fg='white',
                                       height=4)
        self.lottery_display.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
        
        # 控制按钮框架
        control_frame = ttk.Frame(lottery_frame)
        control_frame.pack(fill=tk.X, pady=(20, 0))
        
        btn_frame = ttk.Frame(control_frame)
        btn_frame.pack(expand=True)
        
        self.start_btn = ttk.Button(btn_frame, text="开始抽奖", style='Lottery.TButton',
                                  command=self.draw_lottery, width=15)
        self.start_btn.pack(side=tk.LEFT, padx=10)
        
        self.stop_btn = ttk.Button(btn_frame, text="停止", style='Danger.TButton',
                                  command=self.stop_lottery, width=15, state=tk.DISABLED)
        self.stop_btn.pack(side=tk.LEFT, padx=10)
        
        self.next_btn = ttk.Button(btn_frame, text="下一个奖项", style='Success.TButton',
                                  command=self.next_prize, width=15)
        self.next_btn.pack(side=tk.LEFT, padx=10)
        
        # 状态信息
        info_frame = ttk.Frame(lottery_frame)
        info_frame.pack(fill=tk.X, pady=(20, 0))
        
        self.status_label = tk.Label(info_frame, 
                                    text="准备就绪", 
                                    font=('Microsoft YaHei', 10),
                                    bg='#f0f8ff',
                                    fg='#666')
        self.status_label.pack()
        
        # 抽奖控制变量
        self.is_drawing = False
        self.current_prize_index = 0
        self.current_draw_count = 0
        
    def create_result_tab(self):
        """创建结果标签页"""
        result_frame = ttk.Frame(self.notebook, padding="20")
        self.notebook.add(result_frame, text="📊 结果")
        
        # 创建左右两个框架
        left_frame = ttk.Frame(result_frame)
        left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 10))
        
        right_frame = ttk.Frame(result_frame)
        right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=(10, 0))
        
        # 左侧：获奖者列表
        winner_frame = ttk.LabelFrame(left_frame, text="🏅 获奖名单", padding="15")
        winner_frame.pack(fill=tk.BOTH, expand=True)
        
        # 创建树形表格显示获奖者
        columns = ("奖项", "姓名", "编号")
        self.winner_tree = ttk.Treeview(winner_frame, columns=columns, show="headings", height=20)
        
        # 设置列标题
        for col in columns:
            self.winner_tree.heading(col, text=col)
            self.winner_tree.column(col, width=100, anchor=tk.CENTER)
        
        # 设置滚动条
        scrollbar = ttk.Scrollbar(winner_frame, orient=tk.VERTICAL, command=self.winner_tree.yview)
        self.winner_tree.configure(yscrollcommand=scrollbar.set)
        
        self.winner_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        # 右侧：统计信息
        stats_frame = ttk.LabelFrame(right_frame, text="📈 统计信息", padding="15")
        stats_frame.pack(fill=tk.BOTH, expand=True)
        
        # 统计信息显示
        self.stats_text = tk.Text(stats_frame, height=20, width=30, 
                                 font=('Microsoft YaHei', 10), bg='#f8f9fa')
        self.stats_text.pack(fill=tk.BOTH, expand=True)
        
        # 控制按钮
        control_frame = ttk.Frame(right_frame)
        control_frame.pack(fill=tk.X, pady=(10, 0))
        
        ttk.Button(control_frame, text="导出结果", style='Lottery.TButton',
                  command=self.export_results).pack(side=tk.LEFT, padx=5)
        ttk.Button(control_frame, text="清空结果", style='Danger.TButton',
                  command=self.clear_results).pack(side=tk.LEFT, padx=5)
        ttk.Button(control_frame, text="打印结果", style='Success.TButton',
                  command=self.print_results).pack(side=tk.LEFT, padx=5)
        
    def create_history_tab(self):
        """创建历史记录标签页"""
        history_frame = ttk.Frame(self.notebook, padding="20")
        self.notebook.add(history_frame, text="📅 历史记录")
        
        # 历史记录显示
        self.history_text = tk.Text(history_frame, height=25, width=80,
                                   font=('Microsoft YaHei', 10), bg='#f8f9fa')
        
        scrollbar = ttk.Scrollbar(history_frame, orient=tk.VERTICAL, command=self.history_text.yview)
        self.history_text.configure(yscrollcommand=scrollbar.set)
        
        self.history_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        # 控制按钮
        btn_frame = ttk.Frame(history_frame)
        btn_frame.pack(fill=tk.X, pady=(10, 0))
        
        ttk.Button(btn_frame, text="加载历史", style='Lottery.TButton',
                  command=self.load_history).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="清空历史", style='Danger.TButton',
                  command=self.clear_history).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="保存历史", style='Success.TButton',
                  command=self.save_history).pack(side=tk.LEFT, padx=5)
        
    def create_status_bar(self):
        """创建状态栏"""
        status_frame = ttk.Frame(self.root, relief=tk.SUNKEN)
        status_frame.pack(side=tk.BOTTOM, fill=tk.X)
        
        self.status_var = tk.StringVar()
        self.status_var.set("就绪 | 奖品: 0 | 参与者: 0 | 已抽奖: 0")
        
        status_label = tk.Label(status_frame, textvariable=self.status_var, 
                               anchor=tk.W, font=('Microsoft YaHei', 9), bg='#e9ecef')
        status_label.pack(fill=tk.X)
        
    def update_status(self):
        """更新状态栏"""
        prize_count = len(self.prizes)
        participant_count = len(self.participants)
        drawn_count = sum(len(winners) for winners in self.winners.values())
        
        status_text = f"就绪 | 奖品: {prize_count} | 参与者: {participant_count} | 已抽奖: {drawn_count}"
        self.status_var.set(status_text)
        
    def load_default_data(self):
        """加载默认数据"""
        self.prizes = self.default_prizes.copy()
        self.participants = self.default_participants.copy()
        self.refresh_data_display()
        
    def add_prize(self):
        """添加奖品"""
        name = self.prize_name.get().strip()
        qty = self.prize_qty.get().strip()
        desc = self.prize_desc.get().strip()
        color = self.color_var.get()
        
        if not name or not qty:
            messagebox.showwarning("警告", "请填写奖品名称和数量！")
            return
            
        try:
            qty = int(qty)
            if qty <= 0:
                messagebox.showwarning("警告", "奖品数量必须大于0！")
                return
        except ValueError:
            messagebox.showwarning("警告", "奖品数量必须是数字！")
            return
            
        prize = {
            "name": name,
            "quantity": qty,
            "description": desc if desc else f"{name}奖品",
            "color": color
        }
        
        self.prizes.append(prize)
        self.refresh_prize_list()
        self.prize_name.delete(0, tk.END)
        self.prize_qty.delete(0, tk.END)
        self.prize_qty.insert(0, "1")
        self.prize_desc.delete(0, tk.END)
        
    def clear_prizes(self):
        """清空奖品"""
        if messagebox.askyesno("确认", "确定要清空所有奖品吗？"):
            self.prizes = []
            self.refresh_prize_list()
            
    def use_default_prizes(self):
        """使用默认奖品"""
        self.prizes = self.default_prizes.copy()
        self.refresh_prize_list()
        
    def generate_participants(self):
        """生成参与者"""
        try:
            count = int(self.participant_count.get())
            prefix = self.prefix_var.get()
            start = int(self.start_num.get())
            
            if count <= 0:
                messagebox.showwarning("警告", "参与者数量必须大于0！")
                return
                
            self.participants = [f"{prefix}{i:03d}" for i in range(start, start + count)]
            self.refresh_participant_list()
            
        except ValueError:
            messagebox.showwarning("警告", "请输入有效的数字！")
            
    def import_participants(self):
        """导入参与者"""
        # 这里可以扩展为从文件导入
        messagebox.showinfo("提示", "导入功能暂未实现，请使用生成功能")
        
    def clear_participants(self):
        """清空参与者"""
        if messagebox.askyesno("确认", "确定要清空所有参与者吗？"):
            self.participants = []
            self.refresh_participant_list()
            
    def refresh_prize_list(self):
        """刷新奖品列表"""
        self.prize_listbox.delete(0, tk.END)
        for prize in self.prizes:
            text = f"{prize['name']} ({prize['quantity']}个) - {prize['description']}"
            self.prize_listbox.insert(tk.END, text)
        self.update_status()
        
    def refresh_participant_list(self):
        """刷新参与者列表"""
        self.participant_listbox.delete(0, tk.END)
        for i, participant in enumerate(self.participants[:20]):  # 只显示前20个
            self.participant_listbox.insert(tk.END, f"{i+1:03d}. {participant}")
        if len(self.participants) > 20:
            self.participant_listbox.insert(tk.END, f"... 等 {len(self.participants)} 个参与者")
        self.update_status()
        
    def refresh_data_display(self):
        """刷新数据显示"""
        self.refresh_prize_list()
        self.refresh_participant_list()
        
    def start_lottery(self):
        """开始抽奖"""
        if not self.prizes:
            messagebox.showwarning("警告", "请先设置奖品！")
            return
            
        if not self.participants:
            messagebox.showwarning("警告", "请先设置参与者！")
            return
            
        # 重置抽奖状态
        self.winners = {}
        self.current_prize_index = 0
        self.current_draw_count = 0
        
        # 初始化奖项数据结构
        for prize in self.prizes:
            self.winners[prize['name']] = []
            self.prize_categories[prize['name']] = {
                'total': prize['quantity'],
                'drawn': 0,
                'color': prize['color']
            }
        
        # 切换到抽奖标签页
        self.notebook.select(1)
        
        # 显示第一个奖项
        self.show_current_prize()
        
        # 清空结果列表
        for item in self.winner_tree.get_children():
            self.winner_tree.delete(item)
        
        # 更新状态
        self.status_label.config(text="准备开始抽奖")
        
    def show_current_prize(self):
        """显示当前奖项"""
        if 0 <= self.current_prize_index < len(self.prizes):
            prize = self.prizes[self.current_prize_index]
            self.current_prize_frame.config(bg=prize['color'])
            self.current_prize_label.config(
                text=f"{prize['name']}\n剩余: {prize['quantity']} 个",
                bg=prize['color']
            )
            self.status_label.config(text=f"当前奖项: {prize['name']}")
        else:
            self.current_prize_frame.config(bg='white')
            self.current_prize_label.config(text="抽奖完成", bg='white')
            self.status_label.config(text="所有奖项已抽完")
            
    def draw_lottery(self):
        """开始抽奖动画"""
        if self.current_prize_index >= len(self.prizes):
            messagebox.showinfo("提示", "所有奖项已抽完！")
            return
            
        if not self.participants:
            messagebox.showwarning("警告", "没有参与者可抽奖！")
            return
            
        prize = self.prizes[self.current_prize_index]
        
        if len(self.winners[prize['name']]) >= prize['quantity']:
            messagebox.showinfo("提示", f"{prize['name']}已抽完！")
            return
            
        # 过滤掉已经中奖的参与者
        all_winners = []
        for winner_list in self.winners.values():
            all_winners.extend(winner_list)
            
        available_participants = [p for p in self.participants if p not in all_winners]
        
        if not available_participants:
            messagebox.showwarning("警告", "没有更多参与者可抽奖！")
            return
            
        # 开始抽奖动画
        self.is_drawing = True
        self.start_btn.config(state=tk.DISABLED)
        self.stop_btn.config(state=tk.NORMAL)
        
        self.animate_lottery(available_participants)
        
    def animate_lottery(self, participants, count=0):
        """抽奖动画"""
        if not self.is_drawing or count >= 30:  # 动画显示30次
            self.finish_lottery(participants)
            return
            
        # 随机显示参与者
        winner = random.choice(participants)
        self.lottery_display.config(text=winner)
        
        # 每隔一段时间更新一次
        self.root.after(50 + count * 2, lambda: self.animate_lottery(participants, count + 1))
        
    def finish_lottery(self, participants):
        """完成抽奖"""
        if not self.is_drawing:
            return
            
        # 随机选择中奖者
        winner = random.choice(participants)
        
        # 添加到中奖列表
        prize = self.prizes[self.current_prize_index]
        self.winners[prize['name']].append(winner)
        
        # 更新显示
        self.lottery_display.config(text=winner)
        
        # 添加到结果列表
        self.winner_tree.insert("", tk.END, values=(prize['name'], winner, len(self.winners[prize['name']])))
        
        # 更新统计
        self.current_draw_count += 1
        prize['quantity'] -= 1
        
        # 检查当前奖项是否抽完
        if prize['quantity'] <= 0:
            self.next_btn.config(state=tk.NORMAL)
            
        # 更新状态
        self.show_current_prize()
        self.update_stats()
        self.add_to_history(prize['name'], winner)
        
        # 重置按钮状态
        self.is_drawing = False
        self.start_btn.config(state=tk.NORMAL)
        self.stop_btn.config(state=tk.DISABLED)
        
    def stop_lottery(self):
        """停止抽奖"""
        self.is_drawing = False
        
    def next_prize(self):
        """切换到下一个奖项"""
        self.current_prize_index += 1
        self.current_draw_count = 0
        self.next_btn.config(state=tk.DISABLED)
        
        if self.current_prize_index < len(self.prizes):
            self.show_current_prize()
        else:
            self.current_prize_label.config(text="抽奖完成！")
            self.status_label.config(text="所有奖项已抽完")
            messagebox.showinfo("恭喜", "抽奖活动圆满结束！")
            
    def update_stats(self):
        """更新统计信息"""
        self.stats_text.delete(1.0, tk.END)
        
        total_winners = 0
        stats_text = "📊 抽奖统计\n\n"
        stats_text += "="*30 + "\n\n"
        
        for prize_name, winner_list in self.winners.items():
            stats_text += f"🏆 {prize_name}:\n"
            stats_text += f"   中奖人数: {len(winner_list)}\n"
            stats_text += f"   中奖者: {', '.join(winner_list)}\n\n"
            total_winners += len(winner_list)
            
        stats_text += "="*30 + "\n\n"
        stats_text += f"总计中奖人数: {total_winners}\n"
        stats_text += f"剩余参与者: {len(self.participants) - total_winners}\n"
        
        # 添加中奖率
        if self.participants:
            win_rate = (total_winners / len(self.participants)) * 100
            stats_text += f"中奖率: {win_rate:.1f}%\n"
            
        self.stats_text.insert(1.0, stats_text)
        self.update_status()
        
    def add_to_history(self, prize_name, winner):
        """添加到历史记录"""
        now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        history_text = f"[{now}] {prize_name}: {winner}\n"
        self.history_text.insert(tk.END, history_text)
        self.history_text.see(tk.END)
        
    def export_results(self):
        """导出结果"""
        try:
            results = {
                "抽奖时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                "奖品设置": self.prizes,
                "中奖结果": self.winners,
                "统计信息": {
                    "总参与者数": len(self.participants),
                    "总中奖人数": sum(len(w) for w in self.winners.values()),
                    "中奖率": f"{(sum(len(w) for w in self.winners.values()) / len(self.participants) * 100):.1f}%" if self.participants else "0%"
                }
            }
            
            # 这里可以扩展为保存到文件
            import json
            result_str = json.dumps(results, ensure_ascii=False, indent=2)
            
            # 显示结果
            messagebox.showinfo("导出结果", f"结果已生成:\n\n{result_str}")
            
        except Exception as e:
            messagebox.showerror("错误", f"导出失败: {str(e)}")
            
    def clear_results(self):
        """清空结果"""
        if messagebox.askyesno("确认", "确定要清空所有结果吗？"):
            for item in self.winner_tree.get_children():
                self.winner_tree.delete(item)
            self.stats_text.delete(1.0, tk.END)
            self.winners = {}
            
    def print_results(self):
        """打印结果"""
        result_text = "🎯 抽奖结果\n\n"
        result_text += "="*40 + "\n\n"
        
        for prize_name, winner_list in self.winners.items():
            result_text += f"🏆 {prize_name}:\n"
            for i, winner in enumerate(winner_list, 1):
                result_text += f"  {i:2d}. {winner}\n"
            result_text += "\n"
            
        result_text += "="*40 + "\n"
        result_text += f"抽奖时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
        
        messagebox.showinfo("抽奖结果", result_text)
        
    def load_history(self):
        """加载历史记录"""
        # 这里可以扩展为从文件加载
        self.history_text.insert(tk.END, f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 加载历史记录功能暂未实现\n")
        
    def clear_history(self):
        """清空历史记录"""
        if messagebox.askyesno("确认", "确定要清空历史记录吗？"):
            self.history_text.delete(1.0, tk.END)
            
    def save_history(self):
        """保存历史记录"""
        # 这里可以扩展为保存到文件
        history_content = self.history_text.get(1.0, tk.END)
        if len(history_content.strip()) > 0:
            messagebox.showinfo("提示", f"历史记录已保存（实际应保存到文件）")
        else:
            messagebox.showwarning("警告", "没有历史记录可保存")

def main():
    """主函数"""
    root = tk.Tk()
    app = LotteryGame(root)
    root.mainloop()

if __name__ == "__main__":
    main()