#!/usr/bin/env python3
"""
简化的多SKU订单导出测试
直接使用SQL查询来验证导出逻辑
"""

import asyncio
import sqlite3
from datetime import datetime

# 数据库路径
DB_PATH = "backend/ordersys.db"


def test_multi_sku_order():
    """测试多SKU订单的导出标记逻辑"""

    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()

    print("=" * 60)
    print("多SKU订单导出标记测试（简化版）")
    print("=" * 60)

    # 1. 查找具有多个SKU的订单
    print("\n=== 步骤1: 查找多SKU订单 ===")

    query = """
    SELECT 原始订单编号, COUNT(*) as sku_count
    FROM procurement_orders
    WHERE 已推送 = '否'
      AND procurement_status = 'PENDING'
    GROUP BY 原始订单编号
    HAVING COUNT(*) > 1
    ORDER BY sku_count DESC
    LIMIT 5
    """

    cursor.execute(query)
    multi_sku_orders = cursor.fetchall()

    if not multi_sku_orders:
        print("✗ 没有找到合适的多SKU订单用于测试")
        conn.close()
        return

    print(f"找到 {len(multi_sku_orders)} 个多SKU订单：")
    for order in multi_sku_orders[:3]:
        print(f"  订单号: {order[0]}, SKU数量: {order[1]}")

    # 使用第一个订单进行测试
    test_order_number = multi_sku_orders[0][0]
    sku_count = multi_sku_orders[0][1]

    print(f"\n选择测试订单: {test_order_number} (包含 {sku_count} 个SKU)")

    # 2. 获取该订单的所有SKU详情
    print("\n=== 步骤2: 获取订单的所有SKU ===")

    query = """
    SELECT id, 线上宝贝名称, 线上销售属性, 颜色, 尺寸, 数量, 已推送, procurement_status
    FROM procurement_orders
    WHERE 原始订单编号 = ?
    ORDER BY id
    """

    cursor.execute(query, (test_order_number,))
    skus = cursor.fetchall()

    print(f"订单 {test_order_number} 的SKU列表：")
    for i, sku in enumerate(skus, 1):
        print(f"\n  SKU #{i}:")
        print(f"    ID: {sku[0]}")
        print(f"    商品名称: {sku[1]}")
        print(f"    销售属性: {sku[2]}")
        print(f"    颜色: {sku[3]}, 尺寸: {sku[4]}")
        print(f"    数量: {sku[5]}")
        print(f"    已推送: {sku[6]}, 状态: {sku[7]}")

    # 3. 模拟导出逻辑
    print("\n=== 步骤3: 模拟导出逻辑查询 ===")

    # 这是update_push_status_for_exported_products中使用的查询
    # 当传入order_ids时的查询条件
    print(f"\n模拟导出第一个SKU (ID={skus[0][0]}):")
    print(f"  商品名称: {skus[0][1]}")
    print(f"  销售属性: {skus[0][2]}")

    # 模拟使用order_ids的查询（这是当前代码的逻辑）
    print("\n当前代码的查询逻辑（使用order_ids）：")
    query_current = """
    SELECT id, 线上宝贝名称, 线上销售属性
    FROM procurement_orders
    WHERE 原始订单编号 = ?
      AND 已推送 = '否'
      AND procurement_status = 'PENDING'
    """

    cursor.execute(query_current, (test_order_number,))
    matched_skus_current = cursor.fetchall()

    print(f"查询条件: WHERE 原始订单编号 = '{test_order_number}' AND 已推送 = '否' AND procurement_status = 'PENDING'")
    print(f"匹配的SKU数量: {len(matched_skus_current)}")

    if len(matched_skus_current) > 1:
        print("⚠️ 警告：查询返回了多个SKU！")
        print("这意味着导出一个SKU时，会标记该订单的所有SKU为'已推送'")
        for sku in matched_skus_current:
            print(f"  - ID={sku[0]}: {sku[1]} ({sku[2]})")

    # 理想的查询逻辑（应该包含销售属性匹配）
    print("\n理想的查询逻辑（增加销售属性匹配）：")
    first_sku_sales_attr = skus[0][2]
    query_ideal = """
    SELECT id, 线上宝贝名称, 线上销售属性
    FROM procurement_orders
    WHERE 原始订单编号 = ?
      AND 线上销售属性 = ?
      AND 已推送 = '否'
      AND procurement_status = 'PENDING'
    """

    cursor.execute(query_ideal, (test_order_number, first_sku_sales_attr))
    matched_skus_ideal = cursor.fetchall()

    print(f"查询条件: WHERE 原始订单编号 = '{test_order_number}' AND 线上销售属性 = '{first_sku_sales_attr}' ...")
    print(f"匹配的SKU数量: {len(matched_skus_ideal)}")

    if len(matched_skus_ideal) == 1:
        print("✓ 正确：只匹配了一个特定的SKU")

    # 4. 结论
    print("\n" + "=" * 60)
    print("测试结论：")

    if len(matched_skus_current) > 1:
        print("\n✗ 发现问题：当前的导出逻辑存在BUG！")
        print(f"  - 导出一个SKU时，会将同一订单的 {len(matched_skus_current)} 个SKU都标记为'已推送'")
        print(f"  - 原因：查询条件只使用了原始订单编号，没有SKU级别的精确匹配")
        print("\n建议修复方案：")
        print("  在 procurement_aggregation_service.py 的第544-550行")
        print("  添加销售属性的匹配条件，例如：")
        print("    ProcurementOrder.线上销售属性 == sales_attr")
    else:
        print("\n✓ 测试通过：导出逻辑正确处理了多SKU订单")
        print("  只有导出的特定SKU会被标记为'已推送'")

    print("=" * 60)

    conn.close()


if __name__ == "__main__":
    test_multi_sku_order()