"""
测试用例模块
包含多种类型的测试题目，用于对比不同提示词策略的效果
"""

# ==================== 测试用例集合 ====================
TEST_CASES = [
    # ========== 数学推理题（容易出错的） ==========
    {
        "id": 1,
        "category": "数学推理",
        "difficulty": "中等",
        "question": "商店有120件衣服，第一天卖出总数的1/3，第二天卖出剩下的1/4，两天一共卖出多少件？",
        "expected_answer": "80件",  # 第一天40件，第二天20件，共60件
        "hint": "注意第二天是卖出'剩下的'1/4，不是总数的1/4"
    },
    {
        "id": 2,
        "category": "数学推理",
        "difficulty": "中等",
        "question": "一件商品先涨价20%，再打8折出售，最终价格是原价的百分之几？",
        "expected_answer": "96%",  # 1.2 * 0.8 = 0.96
        "hint": "连续百分比变化需要相乘，不是相加"
    },
    
    # ========== 逻辑推理题 ==========
    {
        "id": 3,
        "category": "逻辑推理",
        "difficulty": "困难",
        "question": "所有的玫瑰都是花，有些花会很快凋谢，所以有些玫瑰会很快凋谢。这个推理正确吗？为什么？",
        "expected_answer": "不正确，这是三段论中的'中项不周延'错误",
        "hint": "考虑'有些花'是否一定包含'玫瑰'"
    },
    {
        "id": 4,
        "category": "逻辑推理",
        "difficulty": "困难",
        "question": "A、B、C三人中只有一人会游泳。A说：我会游泳。B说：我不会游泳。C说：A不会游泳。如果三人中只有一人说真话，那么谁会游泳？",
        "expected_answer": "B会游泳",
        "hint": "使用假设法，分别假设每个人说真话"
    },
    
    # ========== 常识应用题 ==========
    {
        "id": 5,
        "category": "常识应用",
        "difficulty": "中等",
        "question": "一个池塘里的荷花，每天都会以前一天的2倍数量开放。如果到第30天荷花就开满了整个池塘，请问在第几天池塘中的荷花开了一半？",
        "expected_answer": "第29天",
        "hint": "每天翻倍，满池的前一天就是半池"
    },
    
    # ========== 额外测试用例（可选） ==========
    {
        "id": 6,
        "category": "数学推理",
        "difficulty": "简单",
        "question": "一个数加上10，乘以2，减去5，等于35。这个数是多少？",
        "expected_answer": "15",  # (35+5)/2 - 10 = 15
        "hint": "使用逆向思维，从结果倒推"
    },
    {
        "id": 7,
        "category": "逻辑推理",
        "difficulty": "中等",
        "question": "如果所有的猫都喜欢鱼，而有些喜欢鱼的动物是宠物，那么能否推出有些猫是宠物？",
        "expected_answer": "不能推出，这是无效的三段论推理",
        "hint": "分析中项'喜欢鱼的动物'的周延性"
    }
]

# ==================== 按类别分组的测试用例 ====================
TEST_CASES_BY_CATEGORY = {}
for case in TEST_CASES:
    category = case["category"]
    if category not in TEST_CASES_BY_CATEGORY:
        TEST_CASES_BY_CATEGORY[category] = []
    TEST_CASES_BY_CATEGORY[category].append(case)


# ==================== 便捷函数 ====================
def get_test_case(case_id):
    """
    根据ID获取测试用例
    
    Args:
        case_id: 测试用例ID
        
    Returns:
        dict: 测试用例字典，如果不存在返回None
    """
    for case in TEST_CASES:
        if case["id"] == case_id:
            return case
    return None


def get_test_cases_by_category(category):
    """
    根据类别获取测试用例
    
    Args:
        category: 类别名称
        
    Returns:
        list: 该类别下的所有测试用例
    """
    return TEST_CASES_BY_CATEGORY.get(category, [])


def list_categories():
    """
    列出所有可用的类别
    
    Returns:
        list: 类别名称列表
    """
    return list(TEST_CASES_BY_CATEGORY.keys())


def get_test_cases_by_difficulty(difficulty):
    """
    根据难度获取测试用例
    
    Args:
        difficulty: 难度级别（简单/中等/困难）
        
    Returns:
        list: 该难度下的所有测试用例
    """
    return [case for case in TEST_CASES if case["difficulty"] == difficulty]
