import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
import datetime

class RunningCharacter:
    def __init__(self):
        self.root = tk.Tk()
        self.root.overrideredirect(True)
        self.root.attributes('-topmost', True)
        self.root.attributes('-transparentcolor', 'white')

        # 加载并处理GIF
        self.image = Image.open("D:/paodong.gif")
        self.original_size = self.image.size
        self.new_size = (self.original_size[0]//10, self.original_size[1]//10)
        self.frames = self.process_gif()
        
        # 创建界面元素
        self.progress_label = tk.Label(self.root, font=('Arial', 12), fg='black')
        self.progress_label.pack()

        self.label = tk.Label(self.root)
        self.label.pack()

        self.progress = ttk.Progressbar(self.root, orient="horizontal", 
                                      length=self.new_size[0], mode="determinate")
        self.progress.pack()

        self.current_frame = 0
        self.animation_delay = 50  # 毫秒
        self.screen_width = self.root.winfo_screenwidth()
        self.screen_height = self.root.winfo_screenheight()

    def process_gif(self):
        frames = []
        try:
            while True:
                frame = self.image.copy()
                frame.thumbnail(self.new_size)
                tk_frame = ImageTk.PhotoImage(frame)
                frames.append(tk_frame)
                self.image.seek(self.image.tell() + 1)
        except EOFError:
            pass
        return frames

    def update_animation(self):
        self.current_frame = (self.current_frame + 1) % len(self.frames)
        self.label.configure(image=self.frames[self.current_frame])
        self.root.after(self.animation_delay, self.update_animation)

    def calculate_position(self):
        now = datetime.datetime.now().time()
        start = datetime.time(8, 30)
        end = datetime.time(17, 30)

        now_sec = now.hour*3600 + now.minute*60 + now.second
        start_sec = start.hour*3600 + start.minute*60
        end_sec = end.hour*3600 + end.minute*60

        if now < start:
            return 0.0
        elif now > end:
            return 1.0
        return (now_sec - start_sec) / (end_sec - start_sec)

    def update_ui(self):
        progress = self.calculate_position()
        
        # 更新位置
        window_width = self.new_size[0]
        x = int((self.screen_width - window_width) * progress)
        y = (self.screen_height - (self.new_size[1] + 50)) // 2  # 调整垂直位置
        
        # 更新进度显示
        percentage = round(progress * 100, 1)
        self.progress_label.config(text=f"{percentage}%")
        self.progress['value'] = percentage
        
        self.root.geometry(f"+{x}+{y}")
        self.root.after(1000, self.update_ui)

    def run(self):
        self.update_animation()
        self.update_ui()
        self.root.mainloop()

if __name__ == "__main__":
    app = RunningCharacter()
    app.run()