import tkinter as tk
from tkinter import ttk
import time
import math

class BeautifulTimer:
    def __init__(self, root):
        self.root = root
        self.root.title("轻奢质感定时器")
        self.root.geometry("450x550")
        self.root.resizable(False, False)
        self.root.configure(bg="#f5f7fa")

        # 计时变量
        self.total_time = 0
        self.remain_time = 0
        self.running = False
        self.timer_id = None

        # 标题
        title = tk.Label(root, text="✨ 精致定时器", font=("微软雅黑", 22, "bold"), bg="#f5f7fa", fg="#2c3e50")
        title.pack(pady=15)

        # 画布 - 圆形进度环
        self.canvas = tk.Canvas(root, width=300, height=300, bg="#f5f7fa", highlightthickness=0)
        self.canvas.pack()

        # 底层灰色圆环
        self.canvas.create_oval(25, 25, 275, 275, outline="#e4e7ed", width=15)
        # 动态进度圆环
        self.progress_arc = self.canvas.create_arc(25, 25, 275, 275, start=90, extent=0,
                                                   fill="", outline="#409eff", width=15)
        # 中间时间文字
        self.time_text = tk.Label(root, text="00:00", font=("微软雅黑", 36, "bold"), bg="#f5f7fa", fg="#333")
        self.time_text.place(x=225, y=160, anchor="center")

        # 输入框架
        frame = ttk.Frame(root)
        frame.pack(pady=20)

        ttk.Label(frame, text="分钟：", font=("微软雅黑", 12)).grid(row=0, column=0, padx=5)
        self.entry_min = ttk.Entry(frame, width=6, font=("微软雅黑", 14), justify="center")
        self.entry_min.grid(row=0, column=1, padx=5)
        self.entry_min.insert(0, "1")

        ttk.Label(frame, text="秒钟：", font=("微软雅黑", 12)).grid(row=0, column=2, padx=5)
        self.entry_sec = ttk.Entry(frame, width=6, font=("微软雅黑", 14), justify="center")
        self.entry_sec.grid(row=0, column=3, padx=5)
        self.entry_sec.insert(0, "0")

        # 按钮组
        btn_frame = ttk.Frame(root)
        btn_frame.pack(pady=10)

        self.btn_start = tk.Button(btn_frame, text="开始计时", command=self.start_timer,
                                   bg="#409eff", fg="white", font=("微软雅黑", 12),
                                   width=8, height=2, relief=tk.FLAT)
        self.btn_start.grid(row=0, column=0, padx=8)

        self.btn_pause = tk.Button(btn_frame, text="暂停", command=self.pause_timer,
                                   bg="#e6a23c", fg="white", font=("微软雅黑", 12),
                                   width=8, height=2, relief=tk.FLAT)
        self.btn_pause.grid(row=0, column=1, padx=8)

        self.btn_reset = tk.Button(btn_frame, text="重置", command=self.reset_timer,
                                   bg="#f56c6c", fg="white", font=("微软雅黑", 12),
                                   width=8, height=2, relief=tk.FLAT)
        self.btn_reset.grid(row=0, column=2, padx=8)

    def update_progress(self):
        """更新环形进度 + 时间文字"""
        if self.total_time <= 0:
            percent = 0
        else:
            percent = (self.total_time - self.remain_time) / self.total_time
        extent = 360 * percent
        self.canvas.itemconfig(self.progress_arc, extent=extent)

        m = self.remain_time // 60
        s = self.remain_time % 60
        self.time_text.config(text=f"{m:02d}:{s:02d}")

    def start_timer(self):
        if self.running:
            return
        try:
            min_num = int(self.entry_min.get())
            sec_num = int(self.entry_sec.get())
        except:
            return

        if self.remain_time <= 0:
            self.total_time = min_num * 60 + sec_num
            self.remain_time = self.total_time

        self.running = True
        self.countdown()

    def countdown(self):
        if not self.running:
            return
        if self.remain_time > 0:
            self.remain_time -= 1
            self.update_progress()
            self.timer_id = self.root.after(1000, self.countdown)
        else:
            self.running = False
            self.time_text.config(text="时间到！")
            # 完成变色提醒
            self.canvas.itemconfig(self.progress_arc, outline="#67c23a")

    def pause_timer(self):
        self.running = False

    def reset_timer(self):
        self.running = False
        if self.timer_id:
            self.root.after_cancel(self.timer_id)
        self.remain_time = 0
        self.total_time = 0
        self.time_text.config(text="00:00")
        self.canvas.itemconfig(self.progress_arc, extent=0, outline="#409eff")

if __name__ == "__main__":
    win = tk.Tk()
    app = BeautifulTimer(win)
    win.mainloop()