import tkinter as tk
from tkinter import ttk, messagebox, font
import time
import threading
import json
import os
import pygame
from datetime import datetime, timedelta
import math
import random

class CartoonTimer:
    def __init__(self, root):
        self.root = root
        self.root.title("⏰ 卡通定时器 ⏰")
        self.root.geometry("800x700")
        
        # 初始化音效
        pygame.mixer.init()
        
        # 卡通颜色方案
        self.colors = {
            'bg': '#FFF5E6',  # 米黄色背景
            'primary': '#FF6B8B',  # 粉色
            'secondary': '#4ECDC4',  # 青色
            'accent': '#FFD166',  # 黄色
            'warning': '#FF9E6D',  # 橙色
            'success': '#06D6A0',  # 绿色
            'frame': '#FFE8D6',  # 浅橙色
            'text': '#2D3047',  # 深蓝
            'time_display': '#3A86FF'  # 蓝色
        }
        
        # 卡通字体
        self.title_font = ("Comic Sans MS", 24, "bold")
        self.heading_font = ("Comic Sans MS", 16, "bold")
        self.normal_font = ("Arial Rounded MT Bold", 12)
        self.time_font = ("Digital-7", 48, "bold")
        self.button_font = ("Arial Rounded MT Bold", 11)
        
        # 定时器状态
        self.timer_running = False
        self.paused = False
        self.time_left = 0
        self.total_time = 0
        self.start_time = None
        self.alarms = []
        self.preset_times = [300, 600, 900, 1800, 2700]  # 5,10,15,30,45分钟
        
        # 计时器数据
        self.session_count = 0
        self.total_focus_time = 0
        
        # 主题
        self.current_theme = "day"
        self.themes = {
            "day": {
                "bg": "#FFF5E6",
                "time_bg": "#FFFFFF",
                "frame": "#FFE8D6"
            },
            "night": {
                "bg": "#1A1A2E",
                "time_bg": "#16213E",
                "frame": "#0F3460"
            },
            "nature": {
                "bg": "#E8F5E8",
                "time_bg": "#C8E6C9",
                "frame": "#A5D6A7"
            }
        }
        
        # 卡通角色表情
        self.character_mood = "happy"
        self.character_emojis = {
            "happy": "😊",
            "working": "😃",
            "tired": "😴",
            "urgent": "😰",
            "done": "🎉"
        }
        
        # 加载音效
        self.sounds = self.load_sounds()
        
        # 加载历史数据
        self.load_data()
        
        # 设置窗口
        self.setup_ui()
        
        # 开始更新循环
        self.update_display()
        
    def load_sounds(self):
        """加载音效（使用内置声音）"""
        try:
            # 尝试加载声音文件，如果没有就使用系统提示音
            sounds = {
                "start": None,
                "pause": None,
                "resume": None,
                "complete": None,
                "tick": None
            }
            return sounds
        except:
            return {}
    
    def load_data(self):
        """加载历史数据"""
        self.data_file = "timer_data.json"
        if os.path.exists(self.data_file):
            try:
                with open(self.data_file, 'r', encoding='utf-8') as f:
                    data = json.load(f)
                    self.session_count = data.get('session_count', 0)
                    self.total_focus_time = data.get('total_focus_time', 0)
                    self.alarms = data.get('alarms', [])
            except:
                self.reset_data()
        else:
            self.reset_data()
    
    def save_data(self):
        """保存数据"""
        data = {
            'session_count': self.session_count,
            'total_focus_time': self.total_focus_time,
            'alarms': self.alarms
        }
        with open(self.data_file, 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=2)
    
    def reset_data(self):
        """重置数据"""
        self.session_count = 0
        self.total_focus_time = 0
        self.alarms = []
    
    def setup_ui(self):
        """设置主界面"""
        # 设置窗口背景
        self.root.configure(bg=self.colors['bg'])
        
        # 创建主容器
        main_container = tk.Frame(self.root, bg=self.colors['bg'])
        main_container.pack(expand=True, fill='both', padx=20, pady=20)
        
        # 标题区域
        self.create_title_area(main_container)
        
        # 主内容区域
        content_frame = tk.Frame(main_container, bg=self.colors['bg'])
        content_frame.pack(expand=True, fill='both', pady=20)
        
        # 左侧 - 计时器控制
        left_frame = tk.Frame(content_frame, bg=self.colors['bg'])
        left_frame.pack(side='left', fill='both', expand=True, padx=(0, 10))
        
        # 右侧 - 功能区域
        right_frame = tk.Frame(content_frame, bg=self.colors['bg'])
        right_frame.pack(side='right', fill='both', expand=True, padx=(10, 0))
        
        # 创建左侧组件
        self.create_timer_display(left_frame)
        self.create_time_input(left_frame)
        self.create_control_buttons(left_frame)
        self.create_preset_buttons(left_frame)
        
        # 创建右侧组件
        self.create_alarm_section(right_frame)
        self.create_stats_section(right_frame)
        self.create_theme_selector(right_frame)
        self.create_character_display(right_frame)
        
        # 状态栏
        self.create_status_bar(main_container)
    
    def create_title_area(self, parent):
        """创建标题区域"""
        title_frame = tk.Frame(parent, bg=self.colors['primary'])
        title_frame.pack(fill='x', pady=(0, 20))
        
        # 装饰性emoji
        emoji_left = tk.Label(title_frame, text="⏰✨🎯", font=("Arial", 30), 
                             bg=self.colors['primary'], fg='white')
        emoji_left.pack(side='left', padx=20)
        
        emoji_right = tk.Label(title_frame, text="⏰✨🎯", font=("Arial", 30), 
                              bg=self.colors['primary'], fg='white')
        emoji_right.pack(side='right', padx=20)
        
        title_label = tk.Label(title_frame, text="卡通定时器", 
                              font=self.title_font, bg=self.colors['primary'], 
                              fg='white', padx=20, pady=10)
        title_label.pack(expand=True)
    
    def create_timer_display(self, parent):
        """创建计时器显示区域"""
        timer_frame = self.create_card_frame(parent, "⏱️ 计时器")
        timer_frame.pack(fill='both', expand=True, pady=(0, 20))
        
        # 时间显示
        self.time_display = tk.Label(timer_frame, text="00:00:00", 
                                    font=("Courier New", 72, "bold"),
                                    bg=self.colors['time_display'],
                                    fg='white',
                                    relief='sunken',
                                    borderwidth=5,
                                    padx=30,
                                    pady=20)
        self.time_display.pack(pady=20, padx=20)
        
        # 进度条
        self.progress_frame = tk.Frame(timer_frame, bg=self.colors['frame'])
        self.progress_frame.pack(fill='x', padx=20, pady=10)
        
        self.progress_bar = ttk.Progressbar(self.progress_frame, 
                                           mode='determinate',
                                           length=300)
        self.progress_bar.pack(fill='x', pady=5)
        
        # 时间标签
        self.time_label = tk.Label(timer_frame, text="点击预设时间或自定义设置", 
                                  font=self.normal_font, 
                                  bg=self.colors['frame'],
                                  fg=self.colors['text'])
        self.time_label.pack(pady=10)
        
        # 角色状态显示
        self.character_label = tk.Label(timer_frame, text="😊", 
                                       font=("Arial", 40),
                                       bg=self.colors['frame'])
        self.character_label.pack(pady=10)
    
    def create_time_input(self, parent):
        """创建时间输入区域"""
        input_frame = self.create_card_frame(parent, "⏰ 设置时间")
        input_frame.pack(fill='x', pady=(0, 20))
        
        # 时间输入
        time_input_frame = tk.Frame(input_frame, bg=self.colors['frame'])
        time_input_frame.pack(pady=20, padx=20)
        
        # 小时
        tk.Label(time_input_frame, text="小时:", 
                font=self.normal_font, bg=self.colors['frame']).grid(row=0, column=0, padx=5)
        
        self.hour_var = tk.StringVar(value="0")
        hour_spin = tk.Spinbox(time_input_frame, from_=0, to=23, width=5,
                              textvariable=self.hour_var, font=self.normal_font)
        hour_spin.grid(row=0, column=1, padx=5)
        
        # 分钟
        tk.Label(time_input_frame, text="分钟:", 
                font=self.normal_font, bg=self.colors['frame']).grid(row=0, column=2, padx=5)
        
        self.minute_var = tk.StringVar(value="0")
        minute_spin = tk.Spinbox(time_input_frame, from_=0, to=59, width=5,
                                textvariable=self.minute_var, font=self.normal_font)
        minute_spin.grid(row=0, column=3, padx=5)
        
        # 秒
        tk.Label(time_input_frame, text="秒:", 
                font=self.normal_font, bg=self.colors['frame']).grid(row=0, column=4, padx=5)
        
        self.second_var = tk.StringVar(value="0")
        second_spin = tk.Spinbox(time_input_frame, from_=0, to=59, width=5,
                                textvariable=self.second_var, font=self.normal_font)
        second_spin.grid(row=0, column=5, padx=5)
        
        # 快速设置按钮
        quick_set_frame = tk.Frame(input_frame, bg=self.colors['frame'])
        quick_set_frame.pack(pady=(0, 20))
        
        tk.Label(quick_set_frame, text="快速设置:", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left', padx=5)
        
        for minutes in [1, 5, 10, 15]:
            btn = self.create_cartoon_button(quick_set_frame, 
                                           f"{minutes}分钟", 
                                           lambda m=minutes: self.set_quick_time(m * 60))
            btn.pack(side='left', padx=2)
    
    def create_control_buttons(self, parent):
        """创建控制按钮"""
        button_frame = self.create_card_frame(parent, "🎮 控制")
        button_frame.pack(fill='x', pady=(0, 20))
        
        # 按钮容器
        btn_container = tk.Frame(button_frame, bg=self.colors['frame'])
        btn_container.pack(pady=20, padx=20)
        
        # 开始按钮
        self.start_btn = self.create_cartoon_button(btn_container, "▶️ 开始", 
                                                   self.start_timer, 
                                                   self.colors['success'])
        self.start_btn.grid(row=0, column=0, padx=5, pady=5)
        
        # 暂停按钮
        self.pause_btn = self.create_cartoon_button(btn_container, "⏸️ 暂停", 
                                                   self.pause_timer, 
                                                   self.colors['warning'])
        self.pause_btn.grid(row=0, column=1, padx=5, pady=5)
        self.pause_btn.config(state='disabled')
        
        # 重置按钮
        self.reset_btn = self.create_cartoon_button(btn_container, "🔄 重置", 
                                                   self.reset_timer, 
                                                   self.colors['accent'])
        self.reset_btn.grid(row=0, column=2, padx=5, pady=5)
        
        # 停止按钮
        self.stop_btn = self.create_cartoon_button(btn_container, "⏹️ 停止", 
                                                  self.stop_timer, 
                                                  self.colors['primary'])
        self.stop_btn.grid(row=0, column=3, padx=5, pady=5)
        self.stop_btn.config(state='disabled')
    
    def create_preset_buttons(self, parent):
        """创建预设时间按钮"""
        preset_frame = self.create_card_frame(parent, "⚡ 预设时间")
        preset_frame.pack(fill='x')
        
        btn_container = tk.Frame(preset_frame, bg=self.colors['frame'])
        btn_container.pack(pady=20, padx=20)
        
        presets = [
            ("5分钟", 300),
            ("10分钟", 600),
            ("15分钟", 900),
            ("25分钟", 1500),
            ("30分钟", 1800),
            ("45分钟", 2700),
            ("1小时", 3600),
            ("2小时", 7200)
        ]
        
        for i, (text, seconds) in enumerate(presets):
            row = i // 4
            col = i % 4
            
            btn = self.create_cartoon_button(btn_container, text, 
                                           lambda s=seconds: self.set_preset_time(s),
                                           self.colors['secondary'])
            btn.grid(row=row, column=col, padx=5, pady=5, sticky='ew')
    
    def create_alarm_section(self, parent):
        """创建闹钟/提醒区域"""
        alarm_frame = self.create_card_frame(parent, "⏰ 闹钟提醒")
        alarm_frame.pack(fill='both', expand=True, pady=(0, 20))
        
        # 添加闹钟
        add_frame = tk.Frame(alarm_frame, bg=self.colors['frame'])
        add_frame.pack(fill='x', padx=20, pady=10)
        
        tk.Label(add_frame, text="时间:", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left', padx=5)
        
        self.alarm_hour = tk.StringVar(value="12")
        hour_spin = tk.Spinbox(add_frame, from_=0, to=23, width=3,
                              textvariable=self.alarm_hour, font=self.normal_font)
        hour_spin.pack(side='left', padx=2)
        
        tk.Label(add_frame, text=":", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left')
        
        self.alarm_minute = tk.StringVar(value="00")
        minute_spin = tk.Spinbox(add_frame, from_=0, to=59, width=3,
                                textvariable=self.alarm_minute, font=self.normal_font)
        minute_spin.pack(side='left', padx=2)
        
        tk.Label(add_frame, text="名称:", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left', padx=5)
        
        self.alarm_name = tk.StringVar(value="提醒")
        name_entry = tk.Entry(add_frame, textvariable=self.alarm_name, 
                             width=10, font=self.normal_font)
        name_entry.pack(side='left', padx=5)
        
        add_btn = self.create_cartoon_button(add_frame, "➕ 添加", 
                                           self.add_alarm, 
                                           self.colors['success'])
        add_btn.pack(side='left', padx=10)
        
        # 闹钟列表
        list_frame = tk.Frame(alarm_frame, bg=self.colors['frame'])
        list_frame.pack(fill='both', expand=True, padx=20, pady=10)
        
        # 创建滚动条
        scrollbar = tk.Scrollbar(list_frame)
        scrollbar.pack(side='right', fill='y')
        
        # 创建列表框
        self.alarm_listbox = tk.Listbox(list_frame, 
                                       height=6,
                                       font=self.normal_font,
                                       yscrollcommand=scrollbar.set,
                                       selectbackground=self.colors['accent'])
        self.alarm_listbox.pack(side='left', fill='both', expand=True)
        scrollbar.config(command=self.alarm_listbox.yview)
        
        # 闹钟控制按钮
        alarm_btn_frame = tk.Frame(alarm_frame, bg=self.colors['frame'])
        alarm_btn_frame.pack(fill='x', padx=20, pady=(0, 20))
        
        self.create_cartoon_button(alarm_btn_frame, "🗑️ 删除", 
                                 self.delete_alarm, 
                                 self.colors['warning']).pack(side='left', padx=5)
        
        self.create_cartoon_button(alarm_btn_frame, "✅ 启用/禁用", 
                                 self.toggle_alarm, 
                                 self.colors['secondary']).pack(side='left', padx=5)
        
        self.create_cartoon_button(alarm_btn_frame, "🔔 测试", 
                                 self.test_alarm, 
                                 self.colors['primary']).pack(side='left', padx=5)
        
        # 更新闹钟显示
        self.update_alarm_list()
    
    def create_stats_section(self, parent):
        """创建统计区域"""
        stats_frame = self.create_card_frame(parent, "📊 统计信息")
        stats_frame.pack(fill='both', expand=True, pady=(0, 20))
        
        stats_container = tk.Frame(stats_frame, bg=self.colors['frame'])
        stats_container.pack(fill='both', expand=True, padx=20, pady=20)
        
        # 会话次数
        session_frame = tk.Frame(stats_container, bg=self.colors['frame'])
        session_frame.pack(fill='x', pady=5)
        
        tk.Label(session_frame, text="🎯 总会话:", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left')
        
        self.session_label = tk.Label(session_frame, text=str(self.session_count), 
                                     font=("Arial", 16, "bold"), 
                                     bg=self.colors['frame'],
                                     fg=self.colors['primary'])
        self.session_label.pack(side='right')
        
        # 总专注时间
        time_frame = tk.Frame(stats_container, bg=self.colors['frame'])
        time_frame.pack(fill='x', pady=5)
        
        tk.Label(time_frame, text="⏱️ 总时间:", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left')
        
        self.time_total_label = tk.Label(time_frame, 
                                        text=self.format_time(self.total_focus_time), 
                                        font=("Arial", 16, "bold"), 
                                        bg=self.colors['frame'],
                                        fg=self.colors['success'])
        self.time_total_label.pack(side='right')
        
        # 今日统计
        today_frame = tk.Frame(stats_container, bg=self.colors['frame'])
        today_frame.pack(fill='x', pady=5)
        
        tk.Label(today_frame, text="📅 今日:", 
                font=self.normal_font, bg=self.colors['frame']).pack(side='left')
        
        self.today_label = tk.Label(today_frame, text="0分钟", 
                                   font=("Arial", 16, "bold"), 
                                   bg=self.colors['frame'],
                                   fg=self.colors['accent'])
        self.today_label.pack(side='right')
        
        # 重置统计按钮
        reset_frame = tk.Frame(stats_container, bg=self.colors['frame'])
        reset_frame.pack(fill='x', pady=(20, 5))
        
        self.create_cartoon_button(reset_frame, "🔄 重置统计", 
                                 self.reset_stats, 
                                 self.colors['warning']).pack()
    
    def create_theme_selector(self, parent):
        """创建主题选择器"""
        theme_frame = self.create_card_frame(parent, "🎨 主题")
        theme_frame.pack(fill='x', pady=(0, 20))
        
        theme_container = tk.Frame(theme_frame, bg=self.colors['frame'])
        theme_container.pack(pady=20, padx=20)
        
        for theme_name, theme_data in self.themes.items():
            btn = self.create_cartoon_button(theme_container, 
                                           f"{theme_name.capitalize()}主题", 
                                           lambda t=theme_name: self.change_theme(t),
                                           theme_data['frame'])
            btn.pack(side='left', padx=5, pady=5)
    
    def create_character_display(self, parent):
        """创建卡通角色显示"""
        char_frame = self.create_card_frame(parent, "😊 卡通助手")
        char_frame.pack(fill='both', expand=True)
        
        char_container = tk.Frame(char_frame, bg=self.colors['frame'])
        char_container.pack(expand=True, fill='both', padx=20, pady=20)
        
        # 角色显示
        self.character_display = tk.Label(char_container, text="😊", 
                                         font=("Arial", 60),
                                         bg=self.colors['frame'])
        self.character_display.pack(pady=10)
        
        # 角色消息
        self.character_message = tk.Label(char_container, 
                                         text="嗨！我来帮你管理时间！", 
                                         font=self.normal_font,
                                         bg=self.colors['frame'],
                                         fg=self.colors['text'])
        self.character_message.pack(pady=10)
        
        # 角色控制
        char_btn_frame = tk.Frame(char_container, bg=self.colors['frame'])
        char_btn_frame.pack(pady=10)
        
        self.create_cartoon_button(char_btn_frame, "💬 说话", 
                                 self.character_speak, 
                                 self.colors['secondary']).pack(side='left', padx=5)
        
        self.create_cartoon_button(char_btn_frame, "🎭 换表情", 
                                 self.change_mood, 
                                 self.colors['primary']).pack(side='left', padx=5)
    
    def create_status_bar(self, parent):
        """创建状态栏"""
        status_frame = tk.Frame(parent, bg=self.colors['primary'])
        status_frame.pack(fill='x', pady=(20, 0))
        
        self.status_label = tk.Label(status_frame, 
                                    text="就绪", 
                                    font=self.normal_font,
                                    bg=self.colors['primary'],
                                    fg='white',
                                    padx=20,
                                    pady=5)
        self.status_label.pack(side='left')
        
        # 当前时间
        self.clock_label = tk.Label(status_frame, 
                                   text="", 
                                   font=self.normal_font,
                                   bg=self.colors['primary'],
                                   fg='white',
                                   padx=20,
                                   pady=5)
        self.clock_label.pack(side='right')
    
    def create_card_frame(self, parent, title):
        """创建卡片式框架"""
        frame = tk.Frame(parent, bg=self.colors['frame'], relief='solid', borderwidth=2)
        
        if title:
            title_frame = tk.Frame(frame, bg=self.colors['primary'])
            title_frame.pack(fill='x')
            
            tk.Label(title_frame, text=title, 
                    font=self.heading_font,
                    bg=self.colors['primary'],
                    fg='white',
                    padx=10,
                    pady=5).pack()
        
        return frame
    
    def create_cartoon_button(self, parent, text, command, color=None):
        """创建卡通风格按钮"""
        if color is None:
            color = self.colors['accent']
        
        btn = tk.Button(parent, text=text, command=command,
                       font=self.button_font,
                       bg=color,
                       fg='white',
                       activebackground=self.colors['primary'],
                       activeforeground='white',
                       relief='raised',
                       borderwidth=3,
                       cursor='hand2',
                       padx=15,
                       pady=8)
        
        # 添加鼠标悬停效果
        btn.bind('<Enter>', lambda e: btn.configure(
            bg=self.lighten_color(color, 20)
        ))
        btn.bind('<Leave>', lambda e: btn.configure(
            bg=color
        ))
        
        return btn
    
    def lighten_color(self, color, factor=20):
        """使颜色变亮"""
        # 简化处理，实际应该解析颜色
        return color
    
    def format_time(self, seconds):
        """格式化时间显示"""
        hours = seconds // 3600
        minutes = (seconds % 3600) // 60
        secs = seconds % 60
        
        if hours > 0:
            return f"{hours:02d}:{minutes:02d}:{secs:02d}"
        else:
            return f"{minutes:02d}:{secs:02d}"
    
    def set_quick_time(self, seconds):
        """设置快速时间"""
        minutes = seconds // 60
        secs = seconds % 60
        self.minute_var.set(str(minutes))
        self.second_var.set(str(secs))
        self.hour_var.set("0")
        
        # 更新显示
        self.time_left = seconds
        self.total_time = seconds
        self.update_time_display()
        self.update_progress()
        self.update_character_mood("working")
    
    def set_preset_time(self, seconds):
        """设置预设时间"""
        hours = seconds // 3600
        minutes = (seconds % 3600) // 60
        secs = seconds % 60
        
        self.hour_var.set(str(hours))
        self.minute_var.set(str(minutes))
        self.second_var.set(str(secs))
        
        # 更新显示
        self.time_left = seconds
        self.total_time = seconds
        self.update_time_display()
        self.update_progress()
        self.update_character_mood("working")
        
        # 更新状态
        self.set_status(f"已设置 {self.format_time(seconds)} 倒计时")
    
    def start_timer(self):
        """开始计时器"""
        if not self.timer_running:
            # 获取输入的时间
            try:
                hours = int(self.hour_var.get())
                minutes = int(self.minute_var.get())
                seconds = int(self.second_var.get())
                
                if hours < 0 or minutes < 0 or seconds < 0:
                    raise ValueError("时间不能为负数")
                
                total_seconds = hours * 3600 + minutes * 60 + seconds
                
                if total_seconds <= 0:
                    messagebox.showwarning("警告", "请设置一个正数的时间！")
                    return
                
                self.time_left = total_seconds
                self.total_time = total_seconds
                self.start_time = time.time()
                self.timer_running = True
                self.paused = False
                
                # 更新按钮状态
                self.start_btn.config(state='disabled')
                self.pause_btn.config(state='normal')
                self.reset_btn.config(state='disabled')
                self.stop_btn.config(state='normal')
                
                # 更新状态
                self.set_status(f"计时器已启动: {self.format_time(total_seconds)}")
                self.update_character_mood("working")
                
                # 播放开始音效
                self.play_sound("start")
                
                # 开始计时线程
                threading.Thread(target=self.run_timer, daemon=True).start()
                
            except ValueError:
                messagebox.showerror("错误", "请输入有效的数字！")
    
    def run_timer(self):
        """运行计时器"""
        while self.timer_running and self.time_left > 0:
            if not self.paused:
                time.sleep(1)
                self.time_left -= 1
                
                # 每秒钟更新一次显示
                self.root.after(0, self.update_time_display)
                self.root.after(0, self.update_progress)
                
                # 更新角色状态
                if self.time_left <= 10:
                    self.root.after(0, lambda: self.update_character_mood("urgent"))
                elif self.time_left <= 60:
                    self.root.after(0, lambda: self.update_character_mood("tired"))
                
                # 播放滴答声
                if self.time_left % 60 == 0:  # 每分钟滴答一次
                    self.play_sound("tick")
    
        # 计时器结束
        if self.time_left <= 0 and self.timer_running:
            self.root.after(0, self.timer_complete)
    
    def pause_timer(self):
        """暂停计时器"""
        if self.timer_running and not self.paused:
            self.paused = True
            self.pause_btn.config(text="⏯️ 继续")
            self.set_status("计时器已暂停")
            self.update_character_mood("tired")
            self.play_sound("pause")
        elif self.timer_running and self.paused:
            self.paused = False
            self.pause_btn.config(text="⏸️ 暂停")
            self.set_status("计时器继续运行")
            self.update_character_mood("working")
            self.play_sound("resume")
    
    def reset_timer(self):
        """重置计时器"""
        if not self.timer_running:
            # 重新获取输入时间
            try:
                hours = int(self.hour_var.get())
                minutes = int(self.minute_var.get())
                seconds = int(self.second_var.get())
                
                total_seconds = hours * 3600 + minutes * 60 + seconds
                self.time_left = total_seconds
                self.total_time = total_seconds
                
                self.update_time_display()
                self.update_progress()
                self.update_character_mood("happy")
                self.set_status("计时器已重置")
            except ValueError:
                messagebox.showerror("错误", "请输入有效的数字！")
    
    def stop_timer(self):
        """停止计时器"""
        self.timer_running = False
        self.paused = False
        
        # 更新按钮状态
        self.start_btn.config(state='normal')
        self.pause_btn.config(state='disabled')
        self.reset_btn.config(state='normal')
        self.stop_btn.config(state='disabled')
        
        # 更新状态
        self.set_status("计时器已停止")
        self.update_character_mood("tired")
        self.play_sound("complete")
        
        # 计算本次专注时间
        if self.total_time > 0:
            time_spent = self.total_time - self.time_left
            if time_spent > 0:
                self.session_count += 1
                self.total_focus_time += time_spent
                self.update_stats()
                self.save_data()
    
    def timer_complete(self):
        """计时器完成"""
        self.timer_running = False
        
        # 更新按钮状态
        self.start_btn.config(state='normal')
        self.pause_btn.config(state='disabled')
        self.reset_btn.config(state='normal')
        self.stop_btn.config(state='disabled')
        
        # 显示完成消息
        self.set_status("⏰ 时间到！")
        self.update_character_mood("done")
        
        # 播放完成音效
        self.play_sound("complete")
        
        # 显示消息框
        messagebox.showinfo("时间到！", "🎉 计时器已完成！")
        
        # 记录统计
        self.session_count += 1
        self.total_focus_time += self.total_time
        self.update_stats()
        self.save_data()
    
    def update_time_display(self):
        """更新时间显示"""
        if self.time_display:
            self.time_display.config(text=self.format_time(self.time_left))
    
    def update_progress(self):
        """更新进度条"""
        if self.total_time > 0 and hasattr(self, 'progress_bar'):
            progress = ((self.total_time - self.time_left) / self.total_time) * 100
            self.progress_bar['value'] = progress
            
            # 更新进度条颜色
            if progress < 30:
                self.progress_bar.configure(style="green.Horizontal.TProgressbar")
            elif progress < 70:
                self.progress_bar.configure(style="orange.Horizontal.TProgressbar")
            else:
                self.progress_bar.configure(style="red.Horizontal.TProgressbar")
    
    def update_character_mood(self, mood):
        """更新角色心情"""
        self.character_mood = mood
        emoji = self.character_emojis.get(mood, "😊")
        
        if hasattr(self, 'character_label'):
            self.character_label.config(text=emoji)
        
        if hasattr(self, 'character_display'):
            self.character_display.config(text=emoji)
        
        # 更新消息
        messages = {
            "happy": ["嗨！我来帮你管理时间！", "准备好开始工作了吗？", "今天也要加油哦！"],
            "working": ["专注工作中...", "坚持就是胜利！", "你可以的！"],
            "tired": ["有点累了...", "休息一下吧！", "快完成了！"],
            "urgent": "只剩一点点时间了！",
            "done": ["太棒了！完成了！", "恭喜完成任务！", "做得好！"]
        }
        
        if mood in messages:
            if isinstance(messages[mood], list):
                message = random.choice(messages[mood])
            else:
                message = messages[mood]
            
            if hasattr(self, 'character_message'):
                self.character_message.config(text=message)
    
    def add_alarm(self):
        """添加闹钟"""
        try:
            hour = int(self.alarm_hour.get())
            minute = int(self.alarm_minute.get())
            name = self.alarm_name.get()
            
            if hour < 0 or hour > 23 or minute < 0 or minute > 59:
                raise ValueError("时间格式错误")
            
            alarm_time = f"{hour:02d}:{minute:02d}"
            alarm = {
                "time": alarm_time,
                "name": name,
                "enabled": True
            }
            
            self.alarms.append(alarm)
            self.update_alarm_list()
            self.set_status(f"已添加闹钟: {alarm_time} - {name}")
            
        except ValueError:
            messagebox.showerror("错误", "请输入有效的时间！")
    
    def delete_alarm(self):
        """删除闹钟"""
        selection = self.alarm_listbox.curselection()
        if selection:
            index = selection[0]
            alarm = self.alarms[index]
            self.alarms.pop(index)
            self.update_alarm_list()
            self.set_status(f"已删除闹钟: {alarm['time']} - {alarm['name']}")
    
    def toggle_alarm(self):
        """切换闹钟状态"""
        selection = self.alarm_listbox.curselection()
        if selection:
            index = selection[0]
            self.alarms[index]['enabled'] = not self.alarms[index]['enabled']
            self.update_alarm_list()
    
    def test_alarm(self):
        """测试闹钟"""
        self.play_sound("complete")
        messagebox.showinfo("测试", "🔔 闹钟测试！")
    
    def update_alarm_list(self):
        """更新闹钟列表"""
        if hasattr(self, 'alarm_listbox'):
            self.alarm_listbox.delete(0, tk.END)
            for alarm in self.alarms:
                status = "✅" if alarm['enabled'] else "❌"
                self.alarm_listbox.insert(tk.END, 
                                        f"{status} {alarm['time']} - {alarm['name']}")
    
    def update_stats(self):
        """更新统计信息"""
        if hasattr(self, 'session_label'):
            self.session_label.config(text=str(self.session_count))
        
        if hasattr(self, 'time_total_label'):
            self.time_total_label.config(text=self.format_time(self.total_focus_time))
        
        if hasattr(self, 'today_label'):
            # 这里可以添加今日统计的逻辑
            self.today_label.config(text=f"{self.session_count}次")
    
    def reset_stats(self):
        """重置统计"""
        if messagebox.askyesno("确认", "确定要重置所有统计信息吗？"):
            self.reset_data()
            self.update_stats()
            self.set_status("统计信息已重置")
    
    def change_theme(self, theme_name):
        """更改主题"""
        if theme_name in self.themes:
            self.current_theme = theme_name
            theme = self.themes[theme_name]
            
            # 更新颜色
            self.colors['bg'] = theme['bg']
            self.colors['frame'] = theme['frame']
            
            # 更新窗口背景
            self.root.configure(bg=theme['bg'])
            
            # 这里可以添加更多主题更新逻辑
            self.set_status(f"已切换到{theme_name}主题")
    
    def character_speak(self):
        """角色说话"""
        messages = [
            "时间就是金钱，要好好利用哦！",
            "设定小目标，一步步完成！",
            "休息是为了走更远的路！",
            "专注当下，你会更有效率！",
            "记得定时休息眼睛哦！",
            "每一个小进步都值得庆祝！"
        ]
        
        message = random.choice(messages)
        self.character_message.config(text=message)
        self.set_status(f"小助手说: {message}")
    
    def change_mood(self):
        """改变角色表情"""
        moods = list(self.character_emojis.keys())
        current_index = moods.index(self.character_mood)
        next_index = (current_index + 1) % len(moods)
        self.update_character_mood(moods[next_index])
    
    def set_status(self, message):
        """设置状态栏消息"""
        if hasattr(self, 'status_label'):
            self.status_label.config(text=message)
    
    def play_sound(self, sound_type):
        """播放音效"""
        try:
            if sound_type in self.sounds and self.sounds[sound_type]:
                self.sounds[sound_type].play()
        except:
            # 如果音效播放失败，使用系统提示音
            self.root.bell()
    
    def update_clock(self):
        """更新时钟显示"""
        current_time = time.strftime("%H:%M:%S")
        if hasattr(self, 'clock_label'):
            self.clock_label.config(text=current_time)
        
        # 检查闹钟
        self.check_alarms()
        
        # 每秒更新一次
        self.root.after(1000, self.update_clock)
    
    def check_alarms(self):
        """检查闹钟"""
        current_time = time.strftime("%H:%M")
        for alarm in self.alarms:
            if alarm['enabled'] and alarm['time'] == current_time:
                # 触发闹钟
                messagebox.showinfo("⏰ 闹钟提醒", f"{alarm['time']} - {alarm['name']}")
                alarm['enabled'] = False  # 触发一次后禁用
                self.update_alarm_list()
    
    def update_display(self):
        """更新显示循环"""
        self.update_clock()
        self.root.after(100, self.update_display)
    
    def on_closing(self):
        """窗口关闭时的处理"""
        self.save_data()
        self.root.destroy()

def main():
    """主函数"""
    root = tk.Tk()
    app = CartoonTimer(root)
    
    # 设置窗口关闭事件
    root.protocol("WM_DELETE_WINDOW", app.on_closing)
    
    # 启动主循环
    root.mainloop()

if __name__ == "__main__":
    main()