import tkinter as tk
from tkinter import ttk
import random


class App20:
    """コイン投げシミュレーター"""

    def __init__(self, root):
        self.root = root
        self.root.title("コイン投げシミュレーター")
        self.root.geometry("400x508")
        self.root.minsize(400, 508)
        self.root.configure(bg="#f8f9fc")
        self.heads = 0
        self.tails = 0
        self._build_ui()

    def _build_ui(self):
        title_frame = tk.Frame(self.root, bg="#3776ab", pady=12)
        title_frame.pack(fill=tk.X)
        tk.Label(title_frame, text="コイン投げシミュレーター",
                 font=("Noto Sans JP", 16, "bold"),
                 bg="#3776ab", fg="white").pack()

        main_frame = tk.Frame(self.root, bg="#f8f9fc", padx=24, pady=16)
        main_frame.pack(fill=tk.BOTH, expand=True)

        # コイン表示
        self.coin_label = tk.Label(main_frame, text="🪙",
                                   font=("Segoe UI Emoji", 64),
                                   bg="#f8f9fc")
        self.coin_label.pack()

        self.result_label = tk.Label(main_frame, text="コインを投げてみよう！",
                                     bg="#f8f9fc", font=("Noto Sans JP", 14, "bold"),
                                     fg="#3776ab")
        self.result_label.pack(pady=(4, 10))

        # 投げる回数
        count_frame = tk.Frame(main_frame, bg="#f8f9fc")
        count_frame.pack()
        tk.Label(count_frame, text="投げる回数:", bg="#f8f9fc",
                 font=("Noto Sans JP", 11)).pack(side=tk.LEFT)
        self.count_var = tk.IntVar(value=1)
        ttk.Spinbox(count_frame, from_=1, to=100, textvariable=self.count_var,
                    width=6, font=("Arial", 12)).pack(side=tk.LEFT, padx=8)
        tk.Button(count_frame, text="投げる！",
                  font=("Noto Sans JP", 12, "bold"),
                  bg="#3776ab", fg="white", activebackground="#2a5a8a",
                  relief=tk.RAISED, bd=0, padx=12, pady=4,
                  command=self.flip).pack(side=tk.LEFT)

        # 統計
        stats_frame = ttk.LabelFrame(main_frame, text="統計", padding=10)
        stats_frame.pack(fill=tk.X, pady=(14, 0))

        bg_color = self.root.cget("bg")
        for col, (label, attr) in enumerate([("表（ヘッズ）", "heads"), ("裏（テイルズ）", "tails")]):
            tk.Label(stats_frame, text=label, bg=bg_color,
                     font=("Noto Sans JP", 11)).grid(row=0, column=col, padx=20)
        self.heads_label = tk.Label(stats_frame, text="0",
                                    bg=bg_color,
                                    font=("Noto Sans JP", 22, "bold"), fg="#3776ab")
        self.heads_label.grid(row=1, column=0, padx=20)
        self.tails_label = tk.Label(stats_frame, text="0",
                                    bg=bg_color,
                                    font=("Noto Sans JP", 22, "bold"), fg="#e74c3c")
        self.tails_label.grid(row=1, column=1, padx=20)

        self.rate_label = tk.Label(main_frame, text="表: --%  裏: --%",
                                   bg="#f8f9fc", font=("Noto Sans JP", 11), fg="#666")
        self.rate_label.pack(pady=(6, 0))

        ttk.Button(main_frame, text="リセット", command=self.reset).pack(pady=(8, 0))

    def flip(self):
        count = self.count_var.get()
        results = [random.choice(["表", "裏"]) for _ in range(count)]
        for r in results:
            if r == "表":
                self.heads += 1
            else:
                self.tails += 1

        if count == 1:
            result = results[0]
            self.coin_label.config(text="🪙" if result == "表" else "💿")
            self.result_label.config(
                text=f"{'表（ヘッズ）' if result == '表' else '裏（テイルズ）'}！",
                fg="#3776ab" if result == "表" else "#e74c3c")
        else:
            h = results.count("表")
            t = results.count("裏")
            self.result_label.config(
                text=f"{count}回の結果: 表 {h}回 / 裏 {t}回",
                fg="#333")

        total = self.heads + self.tails
        self.heads_label.config(text=str(self.heads))
        self.tails_label.config(text=str(self.tails))
        if total > 0:
            self.rate_label.config(
                text=f"表: {self.heads/total*100:.1f}%  裏: {self.tails/total*100:.1f}%  (合計{total}回)")

    def reset(self):
        self.heads = self.tails = 0
        self.coin_label.config(text="🪙")
        self.result_label.config(text="コインを投げてみよう！", fg="#3776ab")
        self.heads_label.config(text="0")
        self.tails_label.config(text="0")
        self.rate_label.config(text="表: --%  裏: --%")


if __name__ == "__main__":
    root = tk.Tk()
    app = App20(root)
    root.mainloop()
