#!/usr/bin/env python3
"""
测试快递单号自动识别和去重功能
"""
import os
import requests
import json

# 禁用代理
os.environ['NO_PROXY'] = 'localhost,127.0.0.1'
os.environ.pop('http_proxy', None)
os.environ.pop('https_proxy', None)
os.environ.pop('all_proxy', None)


def test_tracking_validation():
    """测试快递单号验证功能"""

    url = "http://localhost:8000/api/v1/new-shipping/check-tracking-number"
    headers = {"Content-Type": "application/json"}

    test_cases = [
        {
            "tracking_number": "88123456789",
            "expected_company": "新元快递",
            "description": "测试88开头 -> 新元快递"
        },
        {
            "tracking_number": "SYW20241119001",
            "expected_company": "速优快递",
            "description": "测试SYW开头 -> 速优快递"
        },
        {
            "tracking_number": "syw20241119002",
            "expected_company": "速优快递",
            "description": "测试syw小写开头 -> 速优快递"
        },
        {
            "tracking_number": "WK2024111901",
            "expected_company": "悟空快递",
            "description": "测试WK开头 -> 悟空快递"
        },
        {
            "tracking_number": "wk2024111902",
            "expected_company": "悟空快递",
            "description": "测试wk小写开头 -> 悟空快递"
        },
        {
            "tracking_number": "SF123456789",
            "expected_company": None,
            "description": "测试无法识别的单号"
        }
    ]

    print("=" * 60)
    print("测试快递公司自动识别功能")
    print("=" * 60)

    for i, test in enumerate(test_cases, 1):
        print(f"\n测试用例 {i}: {test['description']}")
        print(f"  快递单号: {test['tracking_number']}")

        data = {"tracking_number": test['tracking_number']}

        try:
            response = requests.post(url, json=data, headers=headers, timeout=10)

            if response.status_code == 200:
                result = response.json()
                detected = result.get('detected_company')

                print(f"  检测结果: {detected or '无法识别'}")

                if detected == test['expected_company']:
                    print(f"  ✅ 测试通过")
                else:
                    print(f"  ❌ 测试失败 - 期望: {test['expected_company']}")

                if result.get('exists'):
                    print(f"  ⚠️ 单号已存在: {result.get('error')}")
                    if result.get('existing_order'):
                        existing = result['existing_order']
                        print(f"    已使用的订单: {existing.get('order_no', 'N/A')}")

            else:
                print(f"  ❌ API请求失败，状态码: {response.status_code}")

        except requests.exceptions.RequestException as e:
            print(f"  ❌ 网络请求错误: {e}")

    # 测试重复检测
    print("\n" + "=" * 60)
    print("测试重复单号检测功能")
    print("=" * 60)

    # 先使用一个单号发货
    print("\n1. 模拟发货使用单号: TEST88999999")

    # 获取一个待发货订单
    list_url = "http://localhost:8000/api/v1/new-shipping/pending-orders"
    list_response = requests.post(list_url, json={"limit": 1})

    if list_response.status_code == 200 and list_response.json().get('orders'):
        order = list_response.json()['orders'][0]
        order_id = order['id']

        # 批量发货
        ship_url = "http://localhost:8000/api/v1/new-shipping/batch-ship"
        ship_data = {
            "order_ids": [order_id],
            "tracking_number": "TEST88999999",
            "shipping_company": "新元快递",
            "operator": "测试员"
        }

        print(f"  发送批量发货请求，订单ID: {order_id}")
        ship_response = requests.post(ship_url, json=ship_data)

        print(f"  响应状态码: {ship_response.status_code}")

        if ship_response.status_code == 200:
            print(f"  ✅ 成功发货，订单ID: {order_id}")
            print(f"  响应内容: {ship_response.json()}")

            # 再次检查同一单号
            print("\n2. 尝试再次使用相同单号: TEST88999999")
            check_data = {"tracking_number": "TEST88999999"}
            check_response = requests.post(url, json=check_data)

            if check_response.status_code == 200:
                result = check_response.json()
                if result.get('exists'):
                    print(f"  ✅ 重复检测成功！")
                    print(f"  错误信息: {result.get('error')}")
                    if result.get('existing_order'):
                        existing = result['existing_order']
                        print(f"  已使用该单号的订单:")
                        print(f"    子订单编号: {existing.get('order_no')}")
                        print(f"    主订单编号: {existing.get('main_order_no')}")
                        print(f"    快递公司: {existing.get('shipping_company')}")
                else:
                    print(f"  ❌ 重复检测失败 - 未检测到单号已被使用")
        else:
            print(f"  ⚠️ 无法创建测试发货记录")
            print(f"  错误响应: {ship_response.text}")
    else:
        print("  ⚠️ 没有待发货订单可用于测试")
        if list_response.status_code != 200:
            print(f"  错误响应: {list_response.text}")

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


if __name__ == "__main__":
    test_tracking_validation()