import tkinter as tk
import random
import datetime
from dataclasses import dataclass, field
from typing import List, Dict, Set
from enum import Enum

class QType(Enum):
    RIDDLE, BRAIN = 1, 2

class QDiff(Enum):
    EASY, MEDIUM, HARD = 1, 2, 3

@dataclass
class Question:
    qid: int
    qtype: QType
    diff: QDiff
    text: str
    answer: str
    hint: str
    tags: List[str]
    total: int = 0
    correct: int = 0

class QuestionBank:
    def __init__(self):
        self.pool: Dict[int, Question] = {}
        self.next_id: int = 1
        self._load_riddles()
        self._load_brains()

    def _add(self, qt: QType, qd: QDiff, text: str, ans: str, hint: str, tags: List[str]):
        self.pool[self.next_id] = Question(self.next_id, qt, qd, text, ans, hint, tags)
        self.next_id += 1

    def _load_riddles(self):
        self._add(QType.RIDDLE, QDiff.MEDIUM, "弯弯藤儿架上爬，串串珍珠上边挂", "葡萄", "水果类", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.EASY, "小小诸葛亮，独坐军中帐，摆成八卦阵，专捉飞来将", "蜘蛛", "结网捕食", ["动物","昆虫"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "有头没有颈，身上冷冰冰，有翅不能飞，无脚反能行", "鱼", "水中游动", ["动物","生物"])
        self._add(QType.RIDDLE, QDiff.EASY, "一物生来真轻巧，身长羽毛不是鸟，没有翅膀空中飞，落地一点声音小", "蒲公英", "随风飘散", ["植物","自然"])
        self._add(QType.RIDDLE, QDiff.EASY, "红口袋，绿口袋，有人怕，有人爱", "辣椒", "调味蔬菜", ["食物","植物"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "身穿白袍子，头戴红帽子，走路像公子，说话高八度", "鹅", "家禽叫声大", ["动物","家禽"])
        self._add(QType.RIDDLE, QDiff.HARD, "远看山有色，近听水无声，春去花还在，人来鸟不惊", "画", "静态图像", ["文化","艺术"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "有个宝贝真奇怪，天天都在门上呆，主人在家它睡觉，主人出门它站岗", "锁", "防盗工具", ["生活","安全"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一匹马儿两头骑，一头高来一头低，虽然马儿不会跑，两人骑着笑嘻嘻", "跷跷板", "儿童游乐", ["生活","娱乐"])
        self._add(QType.RIDDLE, QDiff.EASY, "一只狗，站门口，扎一刀，流一手", "锁", "钥匙插入", ["生活","安全"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "小时青青老来黄，千锤万打结成双，送君千里终须别，最后还要抛路旁", "草鞋", "古代 footwear", ["历史","生活"])
        self._add(QType.RIDDLE, QDiff.EASY, "有风不动无风动，不动无风动有风", "扇子", "纳凉工具", ["生活","用具"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一物生得怪，胡须满脑袋，解开衣裳看，珍珠抱满怀", "玉米", "粮食作物", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.EASY, "兄弟七八个，围着柱子坐，大家一分手，衣服就扯破", "蒜", "调味品", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "青树结青瓜，青瓜包棉花，棉花包梳子，梳子包豆芽", "柚子", "大型水果", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.EASY, "白嫩小宝宝，洗澡吹泡泡，洗洗身体小，再洗不见了", "肥皂", "清洁用品", ["生活","卫生"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "铁打汉，脚底宽，上钉钉，走千山", "铁鞋", "耐磨 footwear", ["工具","生活"])
        self._add(QType.RIDDLE, QDiff.EASY, "有眼无珠一身光，穿红穿绿又穿黄", "灯笼", "照明工具", ["生活","文化"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一间房子扁又长，上边开了许多窗，用嘴吹进一阵风，好听的音乐响四方", "口琴", "吹奏乐器", ["文化","音乐"])
        self._add(QType.RIDDLE, QDiff.EASY, "一个小碗尾巴长，能盛饭菜能盛汤，盛上汤饭它不吃，自己饿得响叮当", "勺子", "用餐工具", ["生活","餐具"])
        self._add(QType.RIDDLE, QDiff.EASY, "四角方方，跟我来往，伤风咳嗽，它先受伤", "手帕", "卫生用品", ["生活","卫生"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "生在山中，颜色相同，来到人间，有绿有红", "茶叶", "冲泡饮品", ["植物","饮品"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "有洞不见虫，有巢不见蜂，有丝不成线，有伞无人踪", "藕", "水生蔬菜", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.EASY, "圆圆像个瓜，人们爱玩它，没有手抢它，抢到手丢它", "篮球", "体育运动", ["生活","运动"])
        self._add(QType.RIDDLE, QDiff.HARD, "一物生来真轻巧，胡须满脑袋，珍珠抱满怀，外衣层层裹", "玉米", "颗粒饱满", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "身穿皮袄黄又黄，呼啸一声百兽慌，虽然没率兵和将，威风凛凛山大王", "老虎", "森林之王", ["动物","野兽"])
        self._add(QType.RIDDLE, QDiff.EASY, "头戴大红花，身穿什锦衣，好像当家人，清晨催人起", "公鸡", "报晓家禽", ["动物","家禽"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一物生来力量大，背着房子走天涯，遇到危险缩进去，安全舒适像在家", "蜗牛", "带壳软体", ["动物","生物"])
        self._add(QType.RIDDLE, QDiff.HARD, "有城没有市，有山没有石，有河没有水，有路没人走", "地图", "地理图表", ["文化","工具"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "四四方方一块田，一边有水一边干，一条乌龙来戏水，黑云盖住白云天", "砚台", "文房四宝", ["文化","文具"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一家兄弟三十多，先生弟弟后生哥，晚上睡觉叠罗汉，白天上学按次序", "日历", "时间记录", ["生活","文具"])
        self._add(QType.RIDDLE, QDiff.EASY, "一只小船尾巴翘，船头见水船尾高，不在江海河里走，只在书本里面跑", "毛笔", "书写工具", ["文化","文具"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "红门楼，白院墙，里面坐个胖儿郎", "嘴", "进食器官", ["人体","生物"])
        self._add(QType.RIDDLE, QDiff.EASY, "十个兄弟张口袋，五个兄弟走进来", "手套", "手部穿戴", ["生活","服饰"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一座桥，地上架，走着走着掉地下", "鼻梁", "面部结构", ["人体","生物"])
        self._add(QType.RIDDLE, QDiff.EASY, "东一片，西一片，到老不相见", "耳朵", "听觉器官", ["人体","生物"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "独木造高楼，没瓦没砖头，人在水下走，水在人上流", "雨伞", "遮雨工具", ["生活","用具"])
        self._add(QType.RIDDLE, QDiff.EASY, "两只小口袋，天天随身带，要是少一只，就把人笑坏", "袜子", "足部穿戴", ["生活","服饰"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "身穿绿衣裳，肚里水汪汪，生的子儿多，个个黑脸膛", "西瓜", "夏季水果", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.EASY, "有个医生技术妙，不打针来不吃药，张开大嘴啊一声，细菌吓得赶快逃", "牙刷", "口腔清洁", ["生活","卫生"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一物生来真稀奇，身穿三百多件衣，每天脱去一两件，年底只剩一张皮", "日历", "时间流逝", ["生活","文具"])
        self._add(QType.RIDDLE, QDiff.HARD, "有面无口，有脚无手，听人讲话，陪人喝酒", "桌子", "家具支撑", ["生活","家具"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "上边毛，下边毛，中间一颗黑葡萄", "眼睛", "视觉器官", ["人体","生物"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "左一片，右一片，隔座山头不见面", "耳朵", "听觉感知", ["人体","生物"])
        self._add(QType.RIDDLE, QDiff.EASY, "千条线，万条线，掉到水里看不见", "雨", "降水现象", ["自然","天气"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "小白花，满天飞，无香无叶也无枝，漫天飞舞像鹅毛，落地一片白茫茫", "雪花", "冬季降水", ["自然","天气"])
        self._add(QType.RIDDLE, QDiff.EASY, "看着像块糕，不能用嘴咬，洗衣洗小手，浑身出白泡", "肥皂", "表面活性剂", ["生活","化学"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "红关公，白刘备，黑张飞，三结义", "荔枝", "外壳红内白", ["植物","食物"])
        self._add(QType.RIDDLE, QDiff.HARD, "泥来做，火来烧，有红有青像块糕，高楼顶上把身安，不怕风吹和雨浇", "砖", "建筑材料", ["工业","建材"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "一只盒子亮堂堂，里面装着小太阳，按下开关亮光闪，黑夜变成白天亮", "手电筒", "便携照明", ["生活","电器"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "铁打心肠一条腿，早晚不等只等挨，主人一来它就跑，跑到天边才回来", "时钟", "时间计量", ["生活","科技"])
        self._add(QType.RIDDLE, QDiff.EASY, "一物三个口，人人都有，有丑有俊，从不外露", "裤子", "下肢穿着", ["生活","服饰"])
        self._add(QType.RIDDLE, QDiff.MEDIUM, "四角方方一块田，一边有水一边干，一条乌龙来戏水，黑云盖住白云天，蘸墨书写", "砚台", "研墨工具", ["文化","文具"])

    def _load_brains(self):
        self._add(QType.BRAIN, QDiff.EASY, "什么东西越洗越脏？", "水", "清洁介质", ["生活","物理"])
        self._add(QType.BRAIN, QDiff.EASY, "什么门永远关不上？", "球门", "体育设施", ["体育","思维"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西有五个头，但人不觉得它怪？", "手", "肢体末端", ["人体","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西明明是你的，别人却用得比你多？", "名字", "身份标识", ["社会","语言"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西肥得快，瘦得更快？", "气球", "充气物体", ["物理","玩具"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么书你不可能在书店买到？", "遗书", "法律文件", ["法律","思维"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西有腿却不能走路？", "桌子", "家具部件", ["生活","家具"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西越擦越小？", "橡皮", "擦拭工具", ["文具","学习"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有嘴不说话？", "茶壶", "容器开口", ["餐具","生活"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西没脚走遍天下？", "船", "水上交通工具", ["交通","地理"])
        self._add(QType.BRAIN, QDiff.EASY, "什么动物天天熬夜？", "熊猫", "黑眼圈", ["动物","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西越用越有钱？", "存钱罐", "储蓄容器", ["金融","生活"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西有网却抓不到鱼？", "蜘蛛网", "丝状结构", ["动物","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有山无石，有水无鱼？", "地图", "平面图形", ["文化","地理"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西打破了才能吃？", "鸡蛋", "内部食用", ["食物","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有眼无珠？", "针", "针眼孔洞", ["工具","生活"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西越热越爱出来？", "汗", "体温调节", ["人体","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有始无终？", "射线", "几何概念", ["数学","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西没嘴能叫，没腿能跑？", "闹钟", "发声装置", ["电器","科技"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西你越是生气，它就越长？", "脾气", "情绪状态", ["心理","社会"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西晚上才会长出尾巴？", "流星", "天体现象", ["天文","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有风的时候不动，无风的时候动？", "风扇", "电动旋转", ["电器","科技"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有头无尾，有眼无眉？", "针", "细长形态", ["工具","生活"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西越削越粗？", "铅笔", "木质包裹", ["文具","学习"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有墙无房，有顶无梁？", "帐篷", "临时住所", ["户外","生活"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有河无水，有山无石？", "地图", "符号表示", ["文化","地理"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有笔无纸，有墨无砚？", "钢笔", "独立书写", ["文具","学习"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有钟无点，有时无刻？", "闹钟", "机械结构", ["电器","科技"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有窗无门，有床无被？", "汽车", "封闭空间", ["交通","科技"])
        self._add(QType.BRAIN, QDiff.EASY, "什么东西有轮无轴，有灯无油？", "玩具车", "模型结构", ["玩具","生活"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有嘴无心，有舌无声？", "茶壶", "壶嘴结构", ["餐具","生活"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有翼无羽，有爪无趾？", "飞机", "飞行器", ["交通","科技"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有根无土，有叶无枝？", "海带", "水生植物", ["植物","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有骨无肉，有节无血？", "竹子", "中空茎秆", ["植物","生物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有皮无毛，有肉无骨？", "柿子", "果肉果实", ["植物","食物"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有壳无肉，有肉无壳？", "蜗牛", "软体外壳", ["动物","生物"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有影无形，有声无音？", "回声", "声波反射", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有价无市，有名无人？", "品牌", "商业符号", ["商业","社会"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有家无室，有院无墙？", "院子", "开放空间", ["建筑","生活"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有路无人，有桥无水？", "棋盘", "格状路径", ["文化","文具"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有火无烟，有烟无火？", "火柴", "燃烧反应", ["工具","化学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有光无热，有热无光？", "镜子", "光线反射", ["光学","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有泪不流，有笑不露？", "照片", "静态影像", ["艺术","文化"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有梦无眠，有醒无觉？", "闹钟", "定时唤醒", ["电器","科技"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有爱无情，有情无爱？", "玩偶", "拟人对象", ["玩具","生活"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有始无终，有终无始？", "圆环", "闭合曲线", ["数学","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有因无果，有果无因？", "巧合", "随机事件", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有问无答，有答无问？", "回声", "声音反射", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有去无回，有回无去？", "时间", "单向流逝", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有生无死，有死无生？", "传说", "虚构故事", ["文化","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有真无假，有假无真？", "镜子", "镜像反射", ["光学","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有实无虚，有虚无实？", "影子", "光学现象", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有长无短，有短无长？", "时间", "连续维度", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有多无少，有少无多？", "年龄", "增长过程", ["生物","社会"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有高无低，有低无高？", "海拔", "垂直高度", ["地理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有深无浅，有浅无深？", "海洋", "水体深度", ["地理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有快无慢，有慢无快？", "光速", "物理极限", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有轻无重，有重无轻？", "思想", "意识活动", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有软无硬，有硬无软？", "棉花", "纤维质地", ["植物","生活"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有甜无苦，有苦无甜？", "回忆", "主观体验", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有冷无热，有热无冷？", "冰", "固态水", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有静无动，有动无静？", "雕塑", "静止艺术", ["艺术","文化"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有旧无新，有新无旧？", "历史", "过往记录", ["文化","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有今无古，有古无今？", "新闻", "即时信息", ["媒体","社会"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有内无外，有外无内？", "空间", "三维容器", ["数学","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有左无右，有右无左？", "方向", "相对位置", ["地理","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有上无下，有下无上？", "天空", "大气空间", ["地理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有前无后，有后无前？", "未来", "时间指向", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有早无晚，有晚无早？", "黎明", "昼夜交界", ["时间","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有晴无雨，有雨无晴？", "天气", "气象状态", ["自然","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有云无雨，有雨无云？", "阴天", "云层覆盖", ["自然","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有雷无声，有声无雷？", "静电", "放电现象", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有电无光，有光无电？", "电池", "储能装置", ["物理","科技"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有磁无铁，有铁无磁？", "磁场", "物理场", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有波无浪，有浪无波？", "声波", "机械振动", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有频无率，有率无频？", "频率", "周期倒数", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有质无量，有量无质？", "质量", "惯性属性", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有力无功，有功无力？", "重力", "吸引力", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有能无量，有量无能？", "能量", "做功本领", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有速无距，有距无速？", "速率", "路程时间比", ["物理","科学"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有位无职，有职无位？", "职位", "社会角色", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有权无责，有责无权？", "权力", "支配能力", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有名无实，有实无名？", "名义", "表面称呼", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有利无害，有害无利？", "利益", "收益驱动", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有得无失，有失无得？", "得失", "损益权衡", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有荣无辱，有辱无荣？", "荣辱", "声誉评价", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有兴无衰，有衰无兴？", "兴衰", "周期变化", ["历史","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有存有亡，有亡无存？", "存亡", "存在状态", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有盛无衰，有衰无盛？", "盛衰", "强弱转换", ["历史","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有合无分，有分无合？", "分合", "聚散关系", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有离无合，有合无离？", "离合", "分离聚合", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有聚无散，有散无聚？", "聚散", "集合分散", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有始无终，有终无始？", "始终", "起点终点", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有因无果，有果无因？", "因果", "逻辑关系", ["哲学","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有缘无份，有份无缘？", "缘分", "机遇关系", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有恩无怨，有怨无恩？", "恩怨", "情感纠葛", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有爱无恨，有恨无爱？", "爱恨", "情感对立", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有喜无悲，有悲无喜？", "喜怒", "情绪两极", ["心理","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有乐无苦，有苦无乐？", "苦乐", "感受对比", ["心理","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有安无危，有危无安？", "安危", "安全状态", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有福无祸，有祸无福？", "祸福", "运气变化", ["社会","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有吉无凶，有凶无吉？", "吉凶", "预兆判断", ["文化","思维"])
        self._add(QType.BRAIN, QDiff.MEDIUM, "什么东西有祥无灾，有灾无祥？", "祥灾", "吉祥与否", ["文化","思维"])
        self._add(QType.BRAIN, QDiff.HARD, "什么东西有瑞无难，有难无瑞？", "瑞难", "祥瑞灾异", ["文化","思维"])

    def all(self) -> List[Question]:
        return list(self.pool.values())

    def filter(self, qtype: QType = None, diff: QDiff = None) -> List[Question]:
        res = self.all()
        if qtype:
            res = [q for q in res if q.qtype == qtype]
        if diff:
            res = [q for q in res if q.diff == diff]
        return res

    def get(self, qid: int) -> Question:
        return self.pool.get(qid)

class QuestionEngine:
    def __init__(self, bank: QuestionBank):
        self.bank = bank
        self.history: Set[int] = set()
        self._seed()

    def _seed(self):
        d = datetime.date.today()
        random.seed(f"{d.year}{d.month}{d.day}")

    def next_question(self, qtype: QType = None, diff: QDiff = None) -> Question:
        candidates = self.bank.filter(qtype, diff)
        candidates = [q for q in candidates if q.qid not in self.history]
        if not candidates:
            self.history.clear()
            candidates = self.bank.filter(qtype, diff)
        q = random.choice(candidates)
        self.history.add(q.qid)
        return q

    def submit(self, q: Question, answer: str) -> bool:
        q.total += 1
        correct = answer.strip().lower() == q.answer.lower()
        if correct:
            q.correct += 1
        return correct

    def stats(self) -> tuple:
        all_q = self.bank.all()
        total = sum(q.total for q in all_q)
        correct = sum(q.correct for q in all_q)
        rate = (correct / total * 100) if total else 0
        return total, correct, rate

    def reset(self):
        self.history.clear()

class App:
    def __init__(self, root: tk.Tk):
        self.root = root
        self.bank = QuestionBank()
        self.engine = QuestionEngine(self.bank)
        self.current: Question | None = None
        self._build_ui()
        self._next()

    def _build_ui(self):
        self.root.title("047.随机谜语/脑筋急转弯")
        self.root.geometry("760x820")
        self.root.configure(bg="#f0f0f0")

        tk.Label(self.root, text="🧠 谜语 & 脑筋急转弯", font=("微软雅黑", 20, "bold"), bg="#f0f0f0").pack(pady=10)

        ctrl = tk.Frame(self.root, bg="#f0f0f0")
        ctrl.pack(pady=5)

        self.type_var = tk.StringVar(value="全部")
        tk.Radiobutton(ctrl, text="全部", variable=self.type_var, value="全部", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)
        tk.Radiobutton(ctrl, text="谜语", variable=self.type_var, value="谜语", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)
        tk.Radiobutton(ctrl, text="脑筋急转弯", variable=self.type_var, value="脑筋急转弯", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)

        self.diff_var = tk.StringVar(value="全部")
        tk.Radiobutton(ctrl, text="全部", variable=self.diff_var, value="全部", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)
        tk.Radiobutton(ctrl, text="简单", variable=self.diff_var, value="简单", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)
        tk.Radiobutton(ctrl, text="中等", variable=self.diff_var, value="中等", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)
        tk.Radiobutton(ctrl, text="困难", variable=self.diff_var, value="困难", bg="#f0f0f0").pack(side=tk.LEFT, padx=5)

        qf = tk.LabelFrame(self.root, text="题目", bg="#f0f0f0")
        qf.pack(padx=15, pady=8, fill=tk.X)
        self.ql = tk.Label(qf, font=("微软雅黑", 13), wraplength=720, justify="left", bg="#f0f0f0")
        self.ql.pack(pady=10, padx=10)

        af = tk.Frame(self.root, bg="#f0f0f0")
        af.pack(pady=5)
        tk.Label(af, text="你的答案：", font=("微软雅黑", 11), bg="#f0f0f0").pack(side=tk.LEFT)
        self.ae = tk.Entry(af, width=36, font=("微软雅黑", 12))
        self.ae.pack(side=tk.LEFT, padx=5)
        self.ae.bind("<Return>", lambda e: self._submit())
        tk.Button(af, text="提交", command=self._submit, bg="#4CAF50", fg="white", font=("微软雅黑", 10, "bold")).pack(side=tk.LEFT, padx=8)
        tk.Button(af, text="提示", command=self._hint, bg="#2196F3", fg="white", font=("微软雅黑", 10)).pack(side=tk.LEFT, padx=5)
        tk.Button(af, text="跳过", command=self._next, bg="#FF9800", fg="white", font=("微软雅黑", 10)).pack(side=tk.LEFT, padx=5)

        rf = tk.LabelFrame(self.root, text="结果", bg="#f0f0f0")
        rf.pack(padx=15, pady=8, fill=tk.BOTH, expand=True)
        self.rt = tk.Text(rf, font=("Consolas", 10), height=14, relief=tk.FLAT)
        self.rt.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

        bf = tk.Frame(self.root, bg="#f0f0f0")
        bf.pack(pady=5)
        self.sl = tk.Label(bf, font=("微软雅黑", 10), bg="#f0f0f0")
        self.sl.pack(side=tk.LEFT, padx=10)
        tk.Button(bf, text="下一题", command=self._next, bg="#4CAF50", fg="white", font=("微软雅黑", 10, "bold")).pack(side=tk.LEFT, padx=5)
        tk.Button(bf, text="重置历史", command=self._reset, bg="#9E9E9E", fg="white", font=("微软雅黑", 10)).pack(side=tk.LEFT, padx=5)
        tk.Button(bf, text="退出", command=self.root.quit, bg="#607D8B", fg="white", font=("微软雅黑", 10)).pack(side=tk.LEFT, padx=5)

    def _map_type(self):
        t = self.type_var.get()
        if t == "谜语":
            return QType.RIDDLE
        if t == "脑筋急转弯":
            return QType.BRAIN
        return None

    def _map_diff(self):
        d = self.diff_var.get()
        if d == "简单":
            return QDiff.EASY
        if d == "中等":
            return QDiff.MEDIUM
        if d == "困难":
            return QDiff.HARD
        return None

    def _next(self):
        self.current = self.engine.next_question(self._map_type(), self._map_diff())
        if not self.current:
            self.ql.config(text="题库为空")
            return
        self.ql.config(text=f"【{self.current.qtype.name}】【{self.current.diff.name}】\n\n{self.current.text}")
        self.ae.config(state="normal")
        self.ae.delete(0, tk.END)
        self.ae.focus()
        self.rt.config(state=tk.NORMAL)
        self.rt.delete("1.0", tk.END)
        self.rt.config(state=tk.DISABLED)
        self._update_stat()

    def _submit(self):
        if not self.current:
            return
        ans = self.ae.get().strip()
        if not ans:
            return
        ok = self.engine.submit(self.current, ans)
        self.rt.config(state=tk.NORMAL)
        if ok:
            self.rt.insert(tk.END, f"✅ 正确！答案：{self.current.answer}\n")
        else:
            self.rt.insert(tk.END, f"❌ 错误！正确答案：{self.current.answer}\n")
        self.rt.insert(tk.END, f"提示：{self.current.hint}\n标签：{','.join(self.current.tags)}\n")
        self.rt.config(state=tk.DISABLED)
        self._update_stat()

    def _hint(self):
        if not self.current:
            return
        self.rt.config(state=tk.NORMAL)
        self.rt.insert(tk.END, f"💡 提示：{self.current.hint}\n")
        self.rt.config(state=tk.DISABLED)

    def _update_stat(self):
        tot, cor, rate = self.engine.stats()
        self.sl.config(text=f"累计：{tot}题  正确：{cor}题  正确率：{rate:.1f}%")

    def _reset(self):
        self.engine.reset()
        self._next()
        self.rt.config(state=tk.NORMAL)
        self.rt.delete("1.0", tk.END)
        self.rt.config(state=tk.DISABLED)

if __name__ == "__main__":
    root = tk.Tk()
    App(root)
    root.mainloop()