#!/usr/bin/env python3
"""
测试推送状态更新功能（通过导出API）
"""
import asyncio
import json
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.services.procurement_aggregation_service import ProcurementAggregationService
from app.models.procurement_orders import ProcurementOrder

async def test_push_status_update():
    """测试推送状态更新"""
    print("=" * 60)
    print("测试推送状态更新功能")
    print("=" * 60)
    
    # 初始化服务
    service = ProcurementAggregationService()
    
    async for db in get_db():
        # 查询Burberry商品的当前状态
        print("\n1. 查询当前订单状态...")
        query = select(ProcurementOrder).where(
            ProcurementOrder.线上宝贝名称.like('%Burberry%黑色字母刺绣短款卫衣%'),
            ProcurementOrder.procurement_method == 'GN'
        )
        result = await db.execute(query)
        order = result.scalar_one_or_none()
        
        if not order:
            print("未找到测试订单")
            return
        
        print(f"订单编号: {order.原始订单编号}")
        print(f"商品名称: {order.线上宝贝名称}")
        print(f"销售属性: {order.线上销售属性}")
        print(f"颜色: {order.颜色}")
        print(f"尺寸: {order.尺寸}")
        print(f"当前推送状态: {order.已推送}")
        
        # 先重置推送状态为"否"（用于测试）
        order.已推送 = '否'
        await db.commit()
        print("已重置推送状态为'否'")
        
        # 模拟前端传递的数据
        print("\n2. 模拟导出操作...")
        exported_products = [{
            'product_name': order.线上宝贝名称,
            'product_code': order.货号,
            'brand': order.品牌,
            'skus': [{
                'color': order.颜色,  # 这里会是 "黑色 (Black)"
                'size': order.尺寸,
                'sales_attr': order.线上销售属性,  # 关键：传递原始销售属性 "黑色_L"
                'quantity': order.数量 or 1
            }]
        }]
        
        print(f"导出数据:")
        print(f"  - 商品名称: {exported_products[0]['product_name']}")
        print(f"  - SKU颜色: {exported_products[0]['skus'][0]['color']}")
        print(f"  - SKU销售属性: {exported_products[0]['skus'][0]['sales_attr']}")
        
        # 调用更新方法
        print("\n3. 调用更新推送状态方法...")
        try:
            result = await service.update_push_status_for_exported_products(
                db=db,
                exported_products=exported_products,
                procurement_method='GN'
            )
            
            print(f"更新结果: {result}")
            
            # 重新查询验证
            print("\n4. 验证更新结果...")
            await db.refresh(order)
            print(f"更新后推送状态: {order.已推送}")
            
            if order.已推送 == '是':
                print("\n✅ 测试成功！推送状态已正确更新")
            else:
                print("\n❌ 测试失败！推送状态未更新")
                
        except Exception as e:
            print(f"\n❌ 更新失败: {e}")
            import traceback
            traceback.print_exc()
        
        break

if __name__ == "__main__":
    asyncio.run(test_push_status_update())