#!/usr/bin/env python
"""
测试Lafayette 148和Moose Knuckles品牌识别
"""

import sys
from pathlib import Path

# 添加项目路径
sys.path.insert(0, str(Path(__file__).parent / "backend"))

from app.utils.text_parser import BrandExtractor

def test_lafayette_and_moose():
    """测试Lafayette 148和Moose Knuckles的识别"""
    
    # 创建品牌提取器
    extractor = BrandExtractor()
    
    print("=" * 60)
    print("Lafayette 148 和 Moose Knuckles 品牌识别测试")
    print("=" * 60)
    
    test_cases = [
        # Lafayette 148 测试 - 各种写法
        ("Lafayette 148连衣裙", "Lafayette 148"),
        ("lafayette 148外套", "Lafayette 148"),
        ("LAFAYETTE 148手袋", "Lafayette 148"),
        ("Lafayette148羊绒衫", "Lafayette 148"),
        ("lafayette148上衣", "Lafayette 148"),
        ("LAFAYETTE148包包", "Lafayette 148"),
        ("小王国Lafayette 148裙子", "Lafayette 148"),
        ("现货Lafayette148羊毛大衣", "Lafayette 148"),
        
        # Moose Knuckles 测试 - 正确拼写
        ("Moose Knuckles羽绒服", "Moose Knuckles"),
        ("moose knuckles派克大衣", "Moose Knuckles"),
        ("MOOSE KNUCKLES外套", "Moose Knuckles"),
        ("MooseKnuckles羽绒服", "Moose Knuckles"),
        ("mooseknuckles大衣", "Moose Knuckles"),
        ("MOOSEKNUCKLES冬装", "Moose Knuckles"),
        
        # Moose Knuckles - 拼写错误变体
        ("Moose Knuclks羽绒服", "Moose Knuckles"),
        ("moose knuclks外套", "Moose Knuckles"),
        ("MOOSE KNUCLKS派克", "Moose Knuckles"),
        ("MooseKnuclks派克大衣", "Moose Knuckles"),
        ("mooseknuclks大衣", "Moose Knuckles"),
        ("MOOSEKNUCLKS羽绒", "Moose Knuckles"),
        
        # 混合测试
        ("小王国Moose Knuckles羽绒服MC", "Moose Knuckles"),
        ("现货MooseKnuckles派克大衣", "Moose Knuckles"),
        ("GN Lafayette148连衣裙", "Lafayette 148"),
        
        # 边界测试
        ("这是Lafayette 148的新款", "Lafayette 148"),
        ("Moose Knuckles加拿大品牌", "Moose Knuckles"),
        ("拼错的MooseKnuclks也能识别", "Moose Knuckles"),
    ]
    
    passed = 0
    failed = 0
    failed_cases = []
    
    for product_name, expected_brand in test_cases:
        result = extractor.extract_brand(product_name)
        
        if result == expected_brand:
            status = "✓"
            passed += 1
        else:
            status = "✗"
            failed += 1
            failed_cases.append((product_name, expected_brand, result))
        
        print(f"{status} 商品名: {product_name}")
        print(f"  期望: {expected_brand}, 实际: {result}")
        
        if result != expected_brand:
            print(f"  >>> 识别失败！")
        print()
    
    # 统计结果
    print("=" * 60)
    print(f"测试结果: {passed} 通过, {failed} 失败")
    print(f"通过率: {passed/(passed+failed)*100:.1f}%")
    
    if failed_cases:
        print("\n失败用例汇总:")
        for product_name, expected, actual in failed_cases:
            print(f"  商品: {product_name}")
            print(f"    期望: {expected}, 实际: {actual}")
    
    print("=" * 60)
    
    return failed == 0

def test_processing_flow():
    """测试处理流程，验证brand_replacements是否生效"""
    
    extractor = BrandExtractor()
    
    print("\n" + "=" * 60)
    print("处理流程测试")
    print("=" * 60)
    
    # 测试预处理是否正确处理了连写形式
    test_cases = [
        # 测试brand_replacements的处理
        ("Lafayette148", "品牌变体应该被处理"),
        ("MooseKnuckles", "连写应该被分开"),
        ("MooseKnuclks", "拼写错误应该被纠正"),
    ]
    
    for text, description in test_cases:
        result = extractor.extract_brand(text)
        print(f"输入: {text}")
        print(f"  {description}")
        print(f"  提取结果: {result}")
        print()

if __name__ == "__main__":
    # 运行测试
    test_passed = test_lafayette_and_moose()
    test_processing_flow()
    
    if test_passed:
        print("\n✅ 所有测试通过！")
    else:
        print("\n⚠️ 部分测试失败，请检查品牌提取逻辑")