import tkinter as tk
from tkinter import ttk, messagebox
import time
import os

class CountdownTimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("⏱️ 专注倒计时器")
        self.root.geometry("500x650")
        self.root.resizable(False, False)
        
        # 状态变量
        self.total_seconds = 0
        self.remaining_seconds = 0
        self.is_running = False
        self.is_paused = False
        self.timer_job = None
        
        # 配置样式
        self.setup_styles()
        self.create_widgets()
        
    def setup_styles(self):
        self.style = ttk.Style()
        self.style.theme_use('clam')
        
        # 字体配置
        self.font_time = ("Consolas", 55, "bold")
        self.font_btn = ("Arial", 12, "bold")
        
        # 颜色配置
        self.color_bg = "#f8f9fa"
        self.color_text_active = "#2c3e50"
        self.color_text_finished = "#e74c3c"
        self.color_progress = "#3498db"
        self.color_progress_finished = "#e74c3c"
        
        self.root.configure(bg=self.color_bg)

    def create_widgets(self):
        # 1. 标题区域
        lbl_title = tk.Label(self.root, text="专注计时器", font=("Microsoft YaHei", 20, "bold"), 
                             bg=self.color_bg, fg="#555")
        lbl_title.pack(pady=(20, 10))
        
        # 2. 时间显示区域 (大数字)
        self.lbl_time = tk.Label(self.root, text="00:00:00", font=self.font_time, 
                                 bg=self.color_bg, fg=self.color_text_active)
        self.lbl_time.pack(pady=10)
        
        # 3. 进度条
        self.progress_var = tk.DoubleVar()



 
        
        # 自定义进度条颜色 (需要稍微复杂的配置，这里简化处理，主要靠逻辑)
        self.style.configure('Custom.TProgressbar', troughcolor='#ddd', background=self.color_progress)

        # 4. 预设按钮区域
        presets_frame = tk.Frame(self.root, bg=self.color_bg)
        presets_frame.pack(pady=10)
        
        presets = [
            ("🍅 25分", 1500),
            ("⏱️ 10分", 600),
            ("☕ 5分", 300),
            ("⚡ 1分", 60)
        ]
        
        for text, seconds in presets:
            btn = tk.Button(presets_frame, text=text, font=self.font_btn, bg="#eef2f7", fg="#333",
                            relief=tk.FLAT, padx=15, pady=8, cursor="hand2",
                            command=lambda s=seconds: self.set_timer(s))
            btn.pack(side=tk.LEFT, padx=5)
            # 鼠标悬停效果 (简单实现)
            btn.bind("<Enter>", lambda e, b=btn: b.config(bg="#dbe4ef"))
            btn.bind("<Leave>", lambda e, b=btn: b.config(bg="#eef2f7"))

        # 5. 自定义输入区域
        input_frame = tk.Frame(self.root, bg=self.color_bg)
        input_frame.pack(pady=15)
        
        tk.Label(input_frame, text="自定义 (时:分:秒)", bg=self.color_bg, fg="#666").pack()
        
        self.entry_custom = tk.Entry(input_frame, font=("Arial", 16), justify='center', width=15)
        self.entry_custom.pack(pady=5)
        self.entry_custom.insert(0, "00:05:00") # 默认值
        
        btn_set_custom = tk.Button(input_frame, text="设定时间", font=self.font_btn, bg="#3498db", fg="white",
                                   relief=tk.FLAT, padx=20, pady=5, command=self.set_custom_timer)
        btn_set_custom.pack(pady=5)

        # 6. 控制按钮区域
        control_frame = tk.Frame(self.root, bg=self.color_bg)
        control_frame.pack(pady=20, fill=tk.X, padx=40)
        
        self.btn_start = tk.Button(control_frame, text="▶ 开始", font=self.font_btn, bg="#2ecc71", fg="white",
                                   relief=tk.FLAT, padx=30, pady=10, command=self.start_timer)
        self.btn_start.pack(side=tk.LEFT, expand=True, padx=5)
        
        self.btn_pause = tk.Button(control_frame, text="⏸ 暂停", font=self.font_btn, bg="#f1c40f", fg="white",
                                   relief=tk.FLAT, padx=30, pady=10, command=self.pause_timer, state=tk.DISABLED)
        self.btn_pause.pack(side=tk.LEFT, expand=True, padx=5)
        
        self.btn_reset = tk.Button(control_frame, text="🔄 重置", font=self.font_btn, bg="#e74c3c", fg="white",
                                   relief=tk.FLAT, padx=30, pady=10, command=self.reset_timer)
        self.btn_reset.pack(side=tk.LEFT, expand=True, padx=5)

        # 状态标签
        self.lbl_status = tk.Label(self.root, text="就绪", font=("Arial", 12), bg=self.color_bg, fg="#888")
        self.lbl_status.pack(side=tk.BOTTOM, pady=20)

    def set_timer(self, seconds):
        if self.is_running:
            if not messagebox.askyesno("确认", "计时进行中，确定要修改时间吗？"):
                return
            self.stop_timer_logic()
            
        self.total_seconds = seconds
        self.remaining_seconds = seconds
        self.update_display()
        self.progress_var.set(100)
        self.lbl_status.config(text=f"已设定 {self.format_time(seconds)}")
        self.lbl_time.config(fg=self.color_text_active)
        self.style.configure('Custom.TProgressbar', background=self.color_progress)

    def set_custom_timer(self):
        text = self.entry_custom.get().strip()
        try:
            parts = list(map(int, text.split(':')))
            if len(parts) != 3:
                raise ValueError
            h, m, s = parts
            if h < 0 or m < 0 or s < 0 or m >= 60 or s >= 60:
                raise ValueError
            
            total = h * 3600 + m * 60 + s
            if total == 0:
                messagebox.showwarning("提示", "时间不能为0")
                return
                
            self.set_timer(total)
        except ValueError:
            messagebox.showerror("错误", "格式错误！请使用 HH:MM:SS 格式 (例如 00:05:00)")

    def start_timer(self):
        if self.remaining_seconds <= 0:
            messagebox.showinfo("提示", "请先设定时间！")
            return
            
        if self.is_paused:
            # 继续
            self.is_paused = False
            self.is_running = True
            self.btn_start.config(state=tk.DISABLED)
            self.btn_pause.config(state=tk.NORMAL, text="⏸ 暂停")
            self.lbl_status.config(text="计时中...")
            self.run_loop()
        elif not self.is_running:
            # 全新开始
            self.is_running = True
            self.btn_start.config(state=tk.DISABLED)
            self.btn_pause.config(state=tk.NORMAL)
            self.btn_set_custom_state(tk.DISABLED)
            self.lbl_status.config(text="计时中...")
            self.run_loop()

    def pause_timer(self):
        if self.is_running:
            self.is_running = False
            self.is_paused = True
            self.btn_start.config(state=tk.NORMAL, text="▶ 继续")
            self.btn_pause.config(state=tk.DISABLED)
            self.lbl_status.config(text="已暂停")
            if self.timer_job:
                self.root.after_cancel(self.timer_job)

    def reset_timer(self):
        self.stop_timer_logic()
        self.remaining_seconds = self.total_seconds
        self.update_display()
        self.progress_var.set(100)
        self.lbl_status.config(text="已重置")
        self.lbl_time.config(fg=self.color_text_active)
        self.style.configure('Custom.TProgressbar', background=self.color_progress)
        self.btn_set_custom_state(tk.NORMAL)

    def stop_timer_logic(self):
        self.is_running = False
        self.is_paused = False
        self.btn_start.config(state=tk.NORMAL, text="▶ 开始")
        self.btn_pause.config(state=tk.DISABLED, text="⏸ 暂停")
        if self.timer_job:
            self.root.after_cancel(self.timer_job)

    def run_loop(self):
        if self.is_running and self.remaining_seconds > 0:
            self.remaining_seconds -= 1
            self.update_display()
            
            # 更新进度条
            progress = (self.remaining_seconds / self.total_seconds) * 100
            self.progress_var.set(progress)
            
            # 最后10%变红
            if progress < 10:
                self.style.configure('Custom.TProgressbar', background=self.color_progress_finished)
                self.lbl_time.config(fg=self.color_text_finished)
            
            self.timer_job = self.root.after(1000, self.run_loop)
        elif self.is_running and self.remaining_seconds == 0:
            self.timer_finished()

    def update_display(self):
        self.lbl_time.config(text=self.format_time(self.remaining_seconds))

    def format_time(self, seconds):
        h = seconds // 3600
        m = (seconds % 3600) // 60
        s = seconds % 60
        return f"{h:02d}:{m:02d}:{s:02d}"

    def btn_set_custom_state(self, state):
        # 辅助函数，用于禁用/启用自定义输入框及其按钮
        # 由于 entry 和 button 是分开的，这里简单处理
        pass 

    def timer_finished(self):
        self.is_running = False
        self.btn_start.config(state=tk.NORMAL, text="▶ 开始")
        self.btn_pause.config(state=tk.DISABLED)
        self.btn_set_custom_state(tk.NORMAL)
        self.lbl_status.config(text="时间到！")
        self.progress_var.set(0)
        
        # 视觉提醒
        self.lbl_time.config(text="00:00:00")
        self.lbl_time.config(fg="#e74c3c")
        
        # 声音提醒
        self.play_alarm()
        
        messagebox.showinfo("⏰ 时间到！", "专注时间结束，休息一下吧！")

    def play_alarm(self):
        try:
            # Windows 系统提示音
            import winsound
            winsound.Beep(1000, 500)
            winsound.Beep(1000, 500)
            winsound.Beep(1000, 500)
        except ImportError:
            # Mac/Linux 尝试使用系统命令 (可能需要终端支持)
            try:
                print('\a') # 终端蜂鸣
            except:
                pass

if __name__ == "__main__":
    root = tk.Tk()
    # 优化高分屏显示
    try:
        from ctypes import windll
        windll.shcore.SetProcessDpiAwareness(1)
    except:
        pass
    
    app = CountdownTimerApp(root)
    root.mainloop()