#!/usr/bin/env python
"""测试NY属性优先级高于LA结尾的采购方式判断"""

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backend'))

from backend.app.services.products_master_service import ProductsMasterService

def test_procurement_method_priority():
    """测试采购方式判断优先级"""
    service = ProductsMasterService()
    
    test_cases = [
        # (product_name, brand, sales_attributes, expected_method, description)
        
        # 测试NY属性优先级高于LA结尾
        ("测试商品LA", "TestBrand", "NY", "NY", "商品名以LA结尾，但属性有NY，应该返回NY"),
        ("测试商品 LA", "TestBrand", "NY", "NY", "商品名以 LA结尾（有空格），但属性有NY，应该返回NY"),
        ("测试商品LAM", "TestBrand", "NY", "NY", "商品名以LAM结尾，但属性有NY，应该返回NY"),
        ("测试商品 LAM", "TestBrand", "NY", "NY", "商品名以 LAM结尾（有空格），但属性有NY，应该返回NY"),
        
        # 测试没有NY属性时，LA结尾正常工作
        ("测试商品LA", "TestBrand", "", "LA", "商品名以LA结尾，没有NY属性，应该返回LA"),
        ("测试商品 LA", "TestBrand", "", "LA", "商品名以 LA结尾（有空格），没有NY属性，应该返回LA"),
        ("测试商品LAM", "TestBrand", "", "LA", "商品名以LAM结尾，没有NY属性，应该返回LA"),
        
        # 测试MC优先级最高（高于NY）
        ("测试商品MC", "TestBrand", "NY", "MC", "商品名以MC结尾，即使属性有NY，应该返回MC"),
        ("测试商品", "TestBrand", "MC NY", "MC", "属性有MC和NY，MC优先级更高，应该返回MC"),
        
        # 测试NY属性在其他情况下的表现
        ("普通商品", "TestBrand", "NY", "NY", "普通商品名，属性有NY，应该返回NY"),
        ("测试商品AT", "TestBrand", "NY", "NY", "商品名以AT结尾，属性有NY，应该返回NY（NY优先级高于AT）"),
        ("测试商品AP", "TestBrand", "NY", "NY", "商品名以AP结尾，属性有NY，应该返回NY（NY优先级高于AP）"),
        ("测试商品SS", "TestBrand", "NY", "NY", "商品名以SS结尾，属性有NY，应该返回NY（NY优先级高于SS）"),
        
        # 测试独立LA属性（没有NY时）
        ("普通商品", "TestBrand", "LA", "LA", "普通商品名，属性有独立的LA，应该返回LA"),
        ("普通商品", "TestBrand", "LA_001", "LA", "普通商品名，属性有LA_001，应该返回LA"),
        
        # 测试默认情况
        ("普通商品", "TestBrand", "", "NY", "普通商品名，没有特殊属性，应该默认返回NY"),
        
        # 测试复杂属性组合
        ("测试商品LA", "TestBrand", "NY LA", "NY", "商品名以LA结尾，属性同时有NY和LA，NY优先级更高"),
        ("测试商品", "TestBrand", "NY LA", "NY", "普通商品名，属性同时有NY和LA，NY优先级更高"),
    ]
    
    print("=" * 80)
    print("测试采购方式判断优先级（NY属性优先于LA结尾）")
    print("=" * 80)
    
    passed = 0
    failed = 0
    
    for product_name, brand, sales_attributes, expected, description in test_cases:
        result = service._determine_procurement_method(product_name, brand, sales_attributes)
        
        if result == expected:
            status = "✅ 通过"
            passed += 1
        else:
            status = f"❌ 失败 (期望: {expected}, 实际: {result})"
            failed += 1
        
        print(f"\n测试: {description}")
        print(f"  商品名: {product_name}")
        print(f"  品牌: {brand}")
        print(f"  销售属性: {sales_attributes if sales_attributes else '(空)'}") 
        print(f"  结果: {status}")
    
    print("\n" + "=" * 80)
    print(f"测试结果汇总: {passed} 通过, {failed} 失败")
    print("=" * 80)
    
    if failed > 0:
        print("\n⚠️  有测试失败，请检查逻辑实现")
        return False
    else:
        print("\n✅ 所有测试通过！NY属性优先级修改成功")
        return True

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