#!/usr/bin/env python3
"""
完整测试：品牌筛选功能 - 验证品牌从筛选结果的产品列表中提取
"""

import requests

BASE_URL = "http://localhost:8000/api/v1"

def get_all_products(filters):
    """获取所有符合条件的产品（处理分页）"""
    all_products = []
    page = 1
    
    while True:
        params = {'page': page, 'page_size': 200}
        params.update(filters)
        
        resp = requests.get(f"{BASE_URL}/products-master/list", params=params)
        data = resp.json()
        
        if 'data' not in data:
            break
            
        items = data['data']['items']
        if not items:
            break
            
        all_products.extend(items)
        
        pagination = data['data']['pagination']
        if page >= pagination['pages']:
            break
        page += 1
    
    return all_products

def extract_brands(products):
    """从产品列表中提取品牌"""
    brands = set()
    for product in products:
        if product.get('品牌'):
            brands.add(product['品牌'])
    return brands

def test_brand_filter():
    print("=" * 80)
    print("完整测试：品牌筛选基于当前筛选结果")
    print("=" * 80)
    
    test_cases = [
        {
            'name': '商品名称筛选：Tods',
            'filters': {'product_name': 'Tods'}
        },
        {
            'name': '商品名称筛选：女款',
            'filters': {'product_name': '女款'}
        },
        {
            'name': '采购方式筛选：MC',
            'filters': {'procurement_method': 'MC'}
        },
        {
            'name': '组合筛选：MC + 女款',
            'filters': {'procurement_method': 'MC', 'product_name': '女款'}
        },
        {
            'name': '组合筛选：NY + Stuart',
            'filters': {'procurement_method': 'NY', 'product_name': 'Stuart'}
        }
    ]
    
    all_passed = True
    
    for i, test_case in enumerate(test_cases, 1):
        print(f"\n【测试 {i}】{test_case['name']}")
        print("-" * 40)
        
        # 获取所有产品
        products = get_all_products(test_case['filters'])
        product_brands = extract_brands(products)
        
        # 获取API返回的品牌
        resp = requests.get(f"{BASE_URL}/products-master/brands", params=test_case['filters'])
        api_brands = set(resp.json()['data'])
        
        # 比较结果
        is_match = product_brands == api_brands
        
        print(f"产品数量: {len(products)}")
        print(f"产品中的品牌数: {len(product_brands)}")
        print(f"API返回品牌数: {len(api_brands)}")
        print(f"✅ 品牌一致: {is_match}")
        
        if not is_match:
            all_passed = False
            only_in_products = product_brands - api_brands
            only_in_api = api_brands - product_brands
            
            if only_in_products:
                print(f"❌ 只在产品中: {list(only_in_products)[:3]}")
            if only_in_api:
                print(f"❌ 只在API中: {list(only_in_api)[:3]}")
        else:
            # 显示部分品牌示例
            if product_brands:
                sample = list(product_brands)[:5]
                print(f"品牌示例: {sample}")
    
    print("\n" + "=" * 80)
    if all_passed:
        print("✅ 所有测试通过！")
        print("品牌筛选功能正确：品牌列表来自当前筛选条件下的产品")
    else:
        print("❌ 存在测试失败")
    print("=" * 80)

if __name__ == "__main__":
    test_brand_filter()