#!/usr/bin/env python3
"""
测试采购方式修改与采购清单同步功能
"""

import requests
import json
import time

def test_procurement_sync():
    """测试采购方式修改后，采购清单的同步情况"""
    base_url = "http://localhost:8000/api/v1"
    
    print("=== 测试采购方式修改与采购清单同步 ===\n")
    
    # 1. 获取当前采购清单统计
    print("1. 获取当前采购清单统计...")
    response = requests.get(f"{base_url}/procurement/list/stats")
    if response.status_code == 200:
        stats_before = response.json()
        print("修改前的采购清单统计:")
        method_stats_before = stats_before.get('method_distribution', {})
        for method, count in method_stats_before.items():
            print(f"  {method}: {count} 个SKU")
    else:
        print(f"获取统计失败: {response.status_code}")
        return
    
    # 2. 获取一个NY采购方式的订单
    print("\n2. 查找NY采购方式的订单...")
    response = requests.get(f"{base_url}/procurement/orders", params={
        "procurement_method": "NY",
        "page_size": 1
    })
    
    if response.status_code != 200:
        print(f"获取NY订单失败: {response.status_code}")
        return
    
    data = response.json()
    ny_orders = data.get('orders', [])
    
    if not ny_orders:
        print("没有找到NY采购方式的订单")
        return
    
    test_order = ny_orders[0]
    order_id = test_order['原始订单编号']
    print(f"找到测试订单: {order_id}")
    print(f"商品: {test_order['线上宝贝名称']}")
    print(f"当前采购方式: {test_order['procurement_method']}")
    
    # 3. 将采购方式从NY改为LA
    print(f"\n3. 将订单 {order_id} 的采购方式从NY改为LA...")
    response = requests.put(
        f"{base_url}/procurement/orders/{order_id}/procurement-method",
        params={"procurement_method": "LA"}
    )
    
    if response.status_code == 200:
        result = response.json()
        print("✅ 采购方式更新成功!")
        print(f"  {result.get('message', '')}")
    else:
        print(f"❌ 采购方式更新失败: {response.status_code}")
        print(f"错误: {response.text}")
        return
    
    # 4. 等待一下确保数据同步（实际上应该是即时的）
    time.sleep(1)
    
    # 5. 再次获取采购清单统计，验证同步
    print("\n4. 验证采购清单统计的变化...")
    response = requests.get(f"{base_url}/procurement/list/stats")
    if response.status_code == 200:
        stats_after = response.json()
        print("修改后的采购清单统计:")
        method_stats_after = stats_after.get('method_distribution', {})
        for method, count in method_stats_after.items():
            print(f"  {method}: {count} 个SKU")
        
        # 检查变化
        print("\n统计变化:")
        for method in set(list(method_stats_before.keys()) + list(method_stats_after.keys())):
            before = method_stats_before.get(method, 0)
            after = method_stats_after.get(method, 0)
            if before != after:
                change = after - before
                change_text = f"+{change}" if change > 0 else str(change)
                print(f"  {method}: {before} → {after} ({change_text})")
    
    # 6. 检查LA采购清单中是否出现了我们修改的商品
    print(f"\n5. 检查LA采购清单中是否包含修改的商品...")
    response = requests.get(f"{base_url}/procurement/list", params={
        "procurement_method": "LA",
        "page_size": 50
    })
    
    if response.status_code == 200:
        la_list = response.json()
        skus = la_list.get('skus', [])
        
        # 查找我们修改的商品
        target_name = test_order['线上宝贝名称']
        target_attr = test_order['线上销售属性']
        
        found = False
        for sku in skus:
            if (sku.get('线上宝贝名称') == target_name and 
                sku.get('线上销售属性') == target_attr):
                found = True
                print(f"✅ 在LA采购清单中找到修改的商品!")
                print(f"  商品: {sku['线上宝贝名称']}")
                print(f"  属性: {sku['线上销售属性']}")
                print(f"  采购方式: {sku['procurement_method']}")
                break
        
        if not found:
            print("❌ 在LA采购清单中未找到修改的商品")
    
    # 7. 恢复原来的采购方式
    print(f"\n6. 恢复订单 {order_id} 的采购方式为NY...")
    response = requests.put(
        f"{base_url}/procurement/orders/{order_id}/procurement-method",
        params={"procurement_method": "NY"}
    )
    
    if response.status_code == 200:
        print("✅ 采购方式已恢复为NY")
    else:
        print(f"❌ 恢复失败: {response.status_code}")
    
    print("\n=== 同步测试完成 ===")

if __name__ == "__main__":
    test_procurement_sync()