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

class MathTrainer:
    def __init__(self, root):
        self.root = root
        self.root.title("限时口算训练器")
        self.root.geometry("520x420")
        self.root.resizable(False, False)

        # 训练数据
        self.total_num = tk.IntVar(value=10)    # 总题数
        self.time_limit = tk.IntVar(value=60)   # 限时秒数
        self.current_q = 0
        self.correct = 0
        self.wrong_list = []
        self.start_time = 0
        self.run_timer = False
        self.question = ""
        self.answer = 0

        # 顶部设置区
        set_frame = ttk.LabelFrame(root, text="训练设置")
        set_frame.pack(pady=8, fill="x", padx=15)

        ttk.Label(set_frame, text="题目数量：").grid(row=0, column=0, padx=5, pady=6)
        ttk.Label(set_frame, text="限时(秒)：").grid(row=0, column=2, padx=10)
        # 计时显示
        self.time_text = tk.StringVar(value="准备开始")
        ttk.Label(root, textvariable=self.time_text, font=("Arial",14,"bold"), foreground="#dd2222").pack(pady=4)

        # 题目显示
        self.q_text = tk.StringVar(value="点击【开始训练】")
        ttk.Label(root, textvariable=self.q_text, font=("Arial",22)).pack(pady=16)

        # 输入答案
        input_frame = ttk.Frame(root)
        input_frame.pack()
        ttk.Label(input_frame, text="你的答案：", font=("Arial",12)).grid(row=0,column=0)
        self.ans_input = ttk.Entry(input_frame, width=12, font=("Arial",14))
        self.ans_input.grid(row=0,column=1,padx=8)
        self.ans_input.bind("<Return>", self.submit_answer)

        # 按钮区
        btn_frame = ttk.Frame(root)
        btn_frame.pack(pady=16)
        self.start_btn = ttk.Button(btn_frame, text="开始训练", command=self.start_train)
        self.start_btn.grid(row=0, column=0, padx=6)
        self.submit_btn = ttk.Button(btn_frame, text="提交答案", command=self.submit_answer, state="disabled")
        self.submit_btn.grid(row=0, column=1, padx=6)

        # 进度信息
        self.info_text = tk.StringVar(value="等待启动训练")
        ttk.Label(root, textvariable=self.info_text).pack()

    def generate_question(self):
        """生成口算题目 加减乘"""
        op = random.choice(["+", "-", "*"])
        a = random.randint(1, 20)
        b = random.randint(1, 20)
        if op == "-" and a < b:
            a,b = b,a
        self.question = f"{a} {op} {b}"
        self.answer = eval(self.question)
        self.q_text.set(self.question)

    def timer_loop(self):
        if not self.run_timer:
            return
        use = time.time() - self.start_time
        remain = self.time_limit.get() - use
        if remain <= 0:
            self.time_text.set("时间到！")
            self.end_train()
            return
        self.time_text.set(f"剩余时间：{int(remain)} 秒")
        self.root.after(1000, self.timer_loop)

    def start_train(self):
        self.current_q = 0
        self.correct = 0
        self.wrong_list.clear()
        self.run_timer = True
        self.start_time = time.time()
        self.start_btn.config(state="disabled")
        self.submit_btn.config(state="normal")
        self.generate_question()
        self.info_text.set(f"第 {self.current_q+1}/{self.total_num.get()} 题")
        self.ans_input.delete(0, tk.END)
        self.ans_input.focus()
        self.timer_loop()

    def submit_answer(self, event=None):
        if not self.run_timer:
            return
        text = self.ans_input.get().strip()
        if not text.isdigit():
            messagebox.showwarning("提示", "请输入数字答案！")
            return
        user_ans = int(text)

        # 判断对错
        if user_ans == self.answer:
            self.correct += 1
        else:
            self.wrong_list.append(f"{self.question} = {self.answer} (你的答案:{user_ans})")

        self.current_q += 1
        self.ans_input.delete(0, tk.END)

        # 判断是否完成所有题目
        if self.current_q >= self.total_num.get():
            self.end_train()
        else:
            self.generate_question()
            self.info_text.set(f"第 {self.current_q+1}/{self.total_num.get()} 题")

    def end_train(self):
        self.run_timer = False
        self.submit_btn.config(state="disabled")
        self.start_btn.config(state="normal")
        total = self.total_num.get()
        rate = self.correct / total * 100

        msg = f"训练结束！\n总题数：{total}\n答对：{self.correct}\n正确率：{rate:.1f}%\n"
        if self.wrong_list:
            msg += "\n【错题汇总】\n"
            msg += "\n".join(self.wrong_list)
        else:
            msg += "\n🎉 全部答对！太棒了！"
        messagebox.showinfo("成绩报告", msg)
        self.q_text.set("训练完成，请重新开始")
        self.time_text.set("训练结束")


if __name__ == "__main__":
    window = tk.Tk()
    app = MathTrainer(window)
    window.mainloop()