import tkinter as tk
import time

last = None
intervals = []

root = tk.Tk()
root.title("키 입력 간격 측정기")
root.geometry("700x500")
root.minsize(700, 500)

text = tk.Text(
    root,
    font=("맑은 고딕", 14),
    wrap="word"
)
text.pack(fill="both", expand=True, padx=10, pady=10)


def show(message):
    text.config(state="normal")
    text.delete("1.0", tk.END)
    text.insert(tk.END, message)
    text.config(state="disabled")


show("""아무 키나 연타하세요.

ESC : 종료
R : 초기화
""")


def on_key(event):
    global last, intervals

    if event.keysym == "Escape":
        root.destroy()
        return

    if event.keysym.lower() == "r":
        last = None
        intervals.clear()

        show("""초기화 완료

아무 키나 다시 연타하세요.
""")
        return

    now = time.perf_counter()

    if last is None:
        show(f"""키 : {event.keysym}

첫 입력

이제 계속 연타하세요.
""")
    else:
        sec = now - last
        ms = sec * 1000

        intervals.append(ms)

        avg_ms = sum(intervals) / len(intervals)
        avg_sec = avg_ms / 1000

        min_ms = min(intervals)
        max_ms = max(intervals)

        show(f"""
━━━━━━━━━━━━━━━━━━━━━━

키 : {event.keysym}

이번 간격
{ms:.2f} ms
{sec:.4f} 초
━━━━━━━━━━━━━━━━━━━━━━

평균
{avg_ms:.2f} ms
{avg_sec:.4f} 초
━━━━━━━━━━━━━━━━━━━━━━
최소
{min_ms:.2f} ms
최대
{max_ms:.2f} ms
━━━━━━━━━━━━━━━━━━━━━━
입력 횟수 : {len(intervals)+1}

ESC : 종료
R : 초기화
""")

    last = now


root.bind("<KeyPress>", on_key)

root.focus_force()

root.mainloop()