#!/usr/bin/env python3
"""
Test smart product code selection logic
Only use merchant code when product name code is subset of merchant code
"""
import sys
import os
sys.path.append('backend')

from app.utils.text_parser import ProductCodeExtractor

def test_smart_selection():
    """Test the smart product code selection logic"""
    extractor = ProductCodeExtractor()
    
    # Test cases simulating the smart selection logic
    test_cases = [
        {
            "name": "商品名称货号是商家编码子集 - 应该使用商家编码",
            "product_name": "SKIMS 女款宽松圆领T恤 AP-TSH-0462 代购6.6 MC",
            "merchant_code": "AP-TSH-0462-GRY-L",
            "expected": "AP-TSH-0462-GRY-L",  # 使用商家编码，因为AP-TSH-0462在AP-TSH-0462-GRY-L中
            "reason": "商品名称货号AP-TSH-0462是商家编码AP-TSH-0462-GRY-L的子集"
        },
        {
            "name": "商品名称货号不是商家编码子集 - 应该使用商品名称",
            "product_name": "Moose Knuckles 女款灰色羽绒服 M33LB041O 1003 代购8.14M",
            "merchant_code": "MK-WINTER-2024",
            "expected": "M33LB041O 1003",  # 使用商品名称，因为M33LB041O 1003不在MK-WINTER-2024中
            "reason": "商品名称货号M33LB041O 1003不是商家编码MK-WINTER-2024的子集"
        },
        {
            "name": "只有商品名称有货号 - 应该使用商品名称",
            "product_name": "Alexander Wang 女款黑色牛仔裤 4DC1254613 8.8AT",
            "merchant_code": "",
            "expected": "4DC1254613",  # 使用商品名称，商家编码为空
            "reason": "商家编码为空，只能使用商品名称货号"
        },
        {
            "name": "只有商家编码有货号 - 应该使用商家编码",
            "product_name": "女款连衣裙 代购MC",
            "merchant_code": "DRESS-2024-001",
            "expected": "DRESS-2024-001",  # 使用商家编码，商品名称没有货号
            "reason": "商品名称没有货号，只能使用商家编码"
        },
        {
            "name": "部分匹配但包含关系 - 应该使用商家编码",
            "product_name": "Bogner 女款夹克 MAGAN 代购8.16",
            "merchant_code": "MAGAN-WINTER-BLACK-M",
            "expected": "MAGAN-WINTER-BLACK-M",  # 使用商家编码，MAGAN在MAGAN-WINTER-BLACK-M中
            "reason": "商品名称货号MAGAN是商家编码MAGAN-WINTER-BLACK-M的子集"
        },
        {
            "name": "完全不相关的货号 - 应该使用商品名称",
            "product_name": "UMA WANG 女款连衣裙 UP5036 UW400 DUDI 8.8AT",
            "merchant_code": "BRAND-X-12345",
            "expected": "UP5036 UW400 DUDI",  # 使用商品名称，货号完全不相关
            "reason": "商品名称货号与商家编码完全不相关"
        }
    ]
    
    print("Testing Smart Product Code Selection Logic")
    print("=" * 60)
    
    passed = 0
    total = len(test_cases)
    
    for i, case in enumerate(test_cases, 1):
        print(f"\nTest {i}: {case['name']}")
        print(f"商品名称: {case['product_name']}")
        print(f"商家编码: {case['merchant_code'] or '(空)'}")
        
        # 模拟智能选择逻辑
        product_name_code = extractor.extract_product_code(case["product_name"])
        merchant_code_extracted = None
        if case["merchant_code"] and case["merchant_code"].strip():
            merchant_code_extracted = extractor.extract_product_code(case["merchant_code"])
        
        # 智能选择逻辑
        if (merchant_code_extracted and product_name_code and 
            product_name_code in merchant_code_extracted):
            result = merchant_code_extracted
        elif product_name_code:
            result = product_name_code
        elif merchant_code_extracted:
            result = merchant_code_extracted
        else:
            result = None
        
        print(f"商品名称提取: {product_name_code}")
        print(f"商家编码提取: {merchant_code_extracted}")
        print(f"选择逻辑: {case['reason']}")
        print(f"期望结果: {case['expected']}")
        print(f"实际结果: {result}")
        
        if result == case["expected"]:
            print("✅ PASS")
            passed += 1
        else:
            print("❌ FAIL")
    
    print(f"\n{'='*60}")
    print(f"Results: {passed}/{total} tests passed ({passed/total*100:.1f}%)")
    
    return passed == total

if __name__ == "__main__":
    success = test_smart_selection()
    sys.exit(0 if success else 1)