#!/usr/bin/env python3
"""
测试复杂货号格式的日期过滤功能
"""

import sys
import os

# 添加项目根目录到路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__)))

from app.utils.text_parser import ProductCodeExtractor

def test_complex_date_filter():
    """测试复杂格式不会误匹配结尾日期"""
    extractor = ProductCodeExtractor()
    
    test_cases = [
        # 多段-连接格式避免日期
        {
            'name': "Lanvin 女款 黑色翻毛皮CURB运动鞋FW-SKDK0B-VESU小王国代购8.10",
            'expected': "FW-SKDK0B-VESU",
            'should_exclude': ["8.10"],
            'description': "多段-连接格式避免匹配结尾日期8.10"
        },
        {
            'name': "Prada 男款皮鞋 2EE368-3AUF-F0002 代购8.12",
            'expected': "2EE368-3AUF-F0002",
            'should_exclude': ["8.12"],
            'description': "三段-连接格式避免匹配结尾日期8.12"
        },
        
        # Balenciaga格式避免日期
        {
            'name': "Balenciaga 女款 Cargo 做旧 运动鞋 785756 W2MU1代购8.15M",
            'expected': "785756 W2MU1",
            'should_exclude': ["8.15"],
            'description': "Balenciaga格式避免匹配结尾日期8.15"
        },
        {
            'name': "Balenciaga 男款运动鞋 123456 ABC789 代购8.16",
            'expected': "123456 ABC789",
            'should_exclude': ["8.16"],
            'description': "Balenciaga格式避免匹配结尾日期8.16"
        },
        {
            'name': "Balenciaga 女包 987654 XY12Z3 AB45代购8.17",
            'expected': "987654 XY12Z3 AB45",
            'should_exclude': ["8.17"],
            'description': "Balenciaga三段格式避免匹配结尾日期8.17"
        },
        
        # 测试不包含日期的情况
        {
            'name': "Lanvin 女款运动鞋 AB-123CD-EF89 小王国代购7.30",
            'expected': "AB-123CD-EF89",
            'should_exclude': ["7.30"],
            'description': "多段-连接格式避免匹配7.30"
        }
    ]
    
    print("=== 复杂货号格式日期过滤测试 ===")
    print("验证：提取正确复杂货号但不匹配结尾日期格式")
    print()
    
    for i, case in enumerate(test_cases, 1):
        print(f"测试 {i}: {case['description']}")
        print(f"商品名称: {case['name']}")
        print(f"期望货号: {case['expected']}")
        
        # 提取品牌
        brand = None
        if "Lanvin" in case['name']:
            brand = "Lanvin"
        elif "Prada" in case['name']:
            brand = "Prada"
        elif "Balenciaga" in case['name']:
            brand = "Balenciaga"
        
        product_code = extractor.extract_product_code(case['name'], brand)
        print(f"实际货号: {product_code}")
        
        # 检查是否正确提取货号
        correct_extraction = product_code == case['expected']
        
        # 检查是否错误匹配了应该排除的日期
        date_excluded = True
        for excluded_date in case['should_exclude']:
            if product_code == excluded_date or (product_code and excluded_date in product_code):
                date_excluded = False
                break
        
        success = correct_extraction and date_excluded
        
        if success:
            print("✅ 测试通过：正确提取货号且避免日期")
        else:
            print("❌ 测试失败！")
            if not correct_extraction:
                print("  - 货号提取不正确")
            if not date_excluded:
                print(f"  - 错误匹配了日期: {case['should_exclude']}")
        print()

if __name__ == "__main__":
    test_complex_date_filter()