"""
测试缺货状态筛选功能
"""

import requests

# 测试API端点
API_BASE_URL = "http://localhost:8000/api/v1"

def test_out_of_stock_filter():
    """测试缺货状态筛选功能"""
    print("=" * 60)
    print("测试缺货状态筛选功能")
    print("=" * 60)

    # 测试1: 获取所有订单（不筛选）
    print("\n1. 获取所有订单（不使用缺货筛选）")
    response = requests.get(
        f"{API_BASE_URL}/procurement/orders",
        params={
            "page": 1,
            "page_size": 10,
            "procurement_status": "ALL"  # 显示所有状态
        }
    )

    if response.status_code == 200:
        data = response.json()
        total = data['pagination']['total']
        print(f"✓ 成功获取订单列表")
        print(f"  总订单数: {total}")
        if data['orders']:
            # 统计缺货订单数
            out_of_stock_count = sum(1 for order in data['orders'] if order.get('is_out_of_stock'))
            in_stock_count = len(data['orders']) - out_of_stock_count
            print(f"  当前页缺货订单: {out_of_stock_count}")
            print(f"  当前页未缺货订单: {in_stock_count}")
    else:
        print(f"✗ 获取订单失败: {response.status_code}")
        print(f"  错误信息: {response.text}")
        return

    # 测试2: 筛选已缺货订单
    print("\n2. 筛选已缺货订单（is_out_of_stock=true）")
    response = requests.get(
        f"{API_BASE_URL}/procurement/orders",
        params={
            "page": 1,
            "page_size": 10,
            "is_out_of_stock": "true",
            "procurement_status": "ALL"
        }
    )

    if response.status_code == 200:
        data = response.json()
        total = data['pagination']['total']
        orders = data['orders']
        print(f"✓ 成功获取已缺货订单")
        print(f"  总数: {total}")
        print(f"  当前页订单数: {len(orders)}")

        # 验证所有返回的订单都是缺货状态
        if orders:
            all_out_of_stock = all(order.get('is_out_of_stock') for order in orders)
            if all_out_of_stock:
                print(f"  ✓ 所有订单均为缺货状态")
                # 显示前3个订单
                for i, order in enumerate(orders[:3]):
                    print(f"    - {order.get('原始订单编号')}: is_out_of_stock={order.get('is_out_of_stock')}")
            else:
                print(f"  ✗ 警告: 发现非缺货订单!")
        else:
            print(f"  暂无已缺货订单")
    else:
        print(f"✗ 筛选已缺货订单失败: {response.status_code}")
        print(f"  错误信息: {response.text}")

    # 测试3: 筛选未缺货订单
    print("\n3. 筛选未缺货订单（is_out_of_stock=false）")
    response = requests.get(
        f"{API_BASE_URL}/procurement/orders",
        params={
            "page": 1,
            "page_size": 10,
            "is_out_of_stock": "false",
            "procurement_status": "ALL"
        }
    )

    if response.status_code == 200:
        data = response.json()
        total = data['pagination']['total']
        orders = data['orders']
        print(f"✓ 成功获取未缺货订单")
        print(f"  总数: {total}")
        print(f"  当前页订单数: {len(orders)}")

        # 验证所有返回的订单都不是缺货状态
        if orders:
            all_in_stock = all(not order.get('is_out_of_stock') for order in orders)
            if all_in_stock:
                print(f"  ✓ 所有订单均为未缺货状态")
                # 显示前3个订单
                for i, order in enumerate(orders[:3]):
                    print(f"    - {order.get('原始订单编号')}: is_out_of_stock={order.get('is_out_of_stock')}")
            else:
                print(f"  ✗ 警告: 发现缺货订单!")
        else:
            print(f"  暂无未缺货订单")
    else:
        print(f"✗ 筛选未缺货订单失败: {response.status_code}")
        print(f"  错误信息: {response.text}")

    # 测试4: 与其他筛选条件组合使用
    print("\n4. 组合筛选：未缺货 + 待采购状态")
    response = requests.get(
        f"{API_BASE_URL}/procurement/orders",
        params={
            "page": 1,
            "page_size": 5,
            "is_out_of_stock": "false",
            "procurement_status": "PENDING"
        }
    )

    if response.status_code == 200:
        data = response.json()
        total = data['pagination']['total']
        orders = data['orders']
        print(f"✓ 成功获取组合筛选结果")
        print(f"  总数: {total}")
        print(f"  当前页订单数: {len(orders)}")

        if orders:
            # 验证订单同时满足两个条件
            valid = all(
                not order.get('is_out_of_stock') and
                order.get('procurement_status') == 'PENDING'
                for order in orders
            )
            if valid:
                print(f"  ✓ 所有订单均满足筛选条件")
            else:
                print(f"  ✗ 警告: 有订单不满足筛选条件!")
    else:
        print(f"✗ 组合筛选失败: {response.status_code}")
        print(f"  错误信息: {response.text}")

    print("\n" + "=" * 60)
    print("测试完成！")
    print("=" * 60)

if __name__ == "__main__":
    try:
        test_out_of_stock_filter()
    except Exception as e:
        print(f"\n✗ 测试失败: {e}")
        import traceback
        traceback.print_exc()
