#!/usr/bin/env python
"""
测试新增品牌的识别效果
"""

import sys
from pathlib import Path

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

from app.utils.text_parser import BrandExtractor

def test_new_brands():
    """测试新增的品牌识别"""
    
    # 创建品牌提取器
    extractor = BrandExtractor()
    
    # 测试用例
    test_cases = [
        # 原有品牌
        ("小王国MM6女包", "MM6"),
        ("VINCE羊绒衫", "Vince"),
        ("Kenzo虎头卫衣", "Kenzo"),
        ("Alexander Wang手袋", "Alexander Wang"),
        ("Alexander McQueen小白鞋", "Alexander McQueen"),
        
        # 新增品牌 - 复合名称
        ("The North Face羽绒服", "The North Face"),
        ("the north face冲锋衣", "The North Face"),  # 测试大小写
        ("Canada Goose派克大衣", "Canada Goose"),
        ("CANADA GOOSE羽绒服", "Canada Goose"),
        ("Brunello Cucinelli羊绒衫", "Brunello Cucinelli"),
        ("DRIES VAN NOTEN连衣裙", "DRIES VAN NOTEN"),
        ("Dries Van Noten外套", "DRIES VAN NOTEN"),
        ("Jil Sander极简风衬衫", "Jil Sander"),
        ("JIL SANDER包包", "Jil Sander"),
        ("Alo Yoga瑜伽裤", "Alo Yoga"),
        
        # 新增品牌 - 单词品牌
        ("Zimmermann碎花裙", "Zimmermann"),
        ("zimmermann连衣裙", "Zimmermann"),
        ("Aritzia羊毛大衣", "Aritzia"),
        ("Bogner滑雪服", "Bogner"),
        ("BOGNER羽绒服", "Bogner"),
        ("Burberry风衣", "Burberry"),
        ("burberry格纹围巾", "Burberry"),
        ("Bally皮鞋", "Bally"),
        ("Balmain西装", "Balmain"),
        ("Celine包包", "Celine"),
        ("CELINE墨镜", "Celine"),
        ("Céline钱包", "Celine"),  # 测试带重音符号
        ("Diesel牛仔裤", "Diesel"),
        ("Dior手袋", "Dior"),
        ("dior口红", "Dior"),
        ("Etro印花衬衫", "Etro"),
        ("Ferragamo皮带", "Ferragamo"),
        ("Ganni连衣裙", "Ganni"),
        ("Givenchy T恤", "Givenchy"),
        ("Hogan运动鞋", "Hogan"),
        ("LEMAIRE衬衫", "LEMAIRE"),
        ("Lemaire外套", "LEMAIRE"),
        ("Loewe手袋", "Loewe"),
        ("LOEWE钱包", "Loewe"),
        ("Mackage羽绒服", "Mackage"),
        ("Madewell牛仔裤", "Madewell"),
        ("Marni手袋", "Marni"),
        ("Stussy卫衣", "Stussy"),
        ("STÜSSY短袖", "Stussy"),  # 测试带变音符号
        ("Versace连衣裙", "Versace"),
        ("versace皮带", "Versace"),
        ("YSL口红", "YSL"),
        ("Saint Laurent手袋", "YSL"),
        ("saint laurent墨镜", "YSL"),
        
        # 混合中文的情况
        ("小王国Burberry风衣", "Burberry"),
        ("小王国现货Dior包包", "Dior"),
        ("国现Loewe手袋MC", "Loewe"),
        
        # 测试边界情况
        ("这是一个Dior的包", "Dior"),
        ("The North Face的羽绒服很保暖", "The North Face"),
    ]
    
    # 执行测试
    print("=" * 60)
    print("新增品牌识别测试")
    print("=" * 60)
    
    passed = 0
    failed = 0
    
    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
        
        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}%")
    print("=" * 60)
    
    return failed == 0

def test_brand_priority():
    """测试品牌匹配优先级"""
    
    extractor = BrandExtractor()
    
    print("\n" + "=" * 60)
    print("品牌匹配优先级测试")
    print("=" * 60)
    
    priority_cases = [
        # 测试长名称优先
        ("Alexander Wang和Alexander McQueen的设计", "Alexander Wang"),  # 先出现的优先
        ("这是Canada Goose不是Goose", "Canada Goose"),
        ("The North Face不只是North", "The North Face"),
        
        # 测试特殊字符处理
        ("CÉLINE包包", "Celine"),
        ("Stüssy潮牌", "Stussy"),
    ]
    
    for product_name, expected_brand in priority_cases:
        result = extractor.extract_brand(product_name)
        status = "✓" if result == expected_brand else "✗"
        print(f"{status} 测试: {product_name}")
        print(f"  期望: {expected_brand}, 实际: {result}")
        print()

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