"""
Flask API 快速测试
==================
测试 Flask 服务的基本功能
"""

import sys
from pathlib import Path

# 添加项目根目录到路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

from dotenv import load_dotenv
load_dotenv()

import requests
import json


def test_api():
    """测试 API 功能"""
    BASE_URL = "http://localhost:5000"
    
    print("\n" + "="*60)
    print("Flask API 测试")
    print("="*60)
    
    # 测试1: 健康检查
    print("\n1. 测试健康检查...")
    try:
        response = requests.get(f"{BASE_URL}/health", timeout=5)
        print(f"   状态码: {response.status_code}")
        print(f"   响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)[:200]}")
    except Exception as e:
        print(f"   ✗ 失败: {e}")
    
    # 测试2: 首页
    print("\n2. 测试首页...")
    try:
        response = requests.get(f"{BASE_URL}/", timeout=5)
        print(f"   状态码: {response.status_code}")
        data = response.json()
        print(f"   API名称: {data.get('name')}")
        print(f"   版本: {data.get('version')}")
        print(f"   SSH状态: {data.get('ssh_status')}")
    except Exception as e:
        print(f"   ✗ 失败: {e}")
    
    # 测试3: 资产类型检测
    print("\n3. 测试资产类型检测...")
    codes = ["000300.SH", "NDX", "BTC"]
    for code in codes:
        try:
            response = requests.get(
                f"{BASE_URL}/api/v1/asset-type",
                params={"code": code},
                timeout=5
            )
            data = response.json()
            print(f"   {code:15s} -> {data.get('asset_type'):15s} ({data.get('description')})")
        except Exception as e:
            print(f"   {code:15s} ✗ 失败: {e}")
    
    # 测试4: 获取K线数据
    print("\n4. 测试获取K线数据...")
    try:
        response = requests.get(
            f"{BASE_URL}/api/v1/ohlcv",
            params={
                "code": "000300.SH",
                "start": "2024-01-01",
                "end": "2024-01-31"
            },
            timeout=30
        )
        data = response.json()
        if "error" in data:
            print(f"   ✗ 错误: {data['error']}")
        else:
            print(f"   ✓ 获取成功: {data.get('count')} 条")
            print(f"   资产类型: {data.get('asset_type')}")
            if data.get('data'):
                latest = data['data'][-1]
                print(f"   最新数据: {latest.get('date')} 收盘 {latest.get('close')}")
    except Exception as e:
        print(f"   ✗ 失败: {e}")
    
    # 测试5: 批量获取
    print("\n5. 测试批量获取...")
    try:
        response = requests.post(
            f"{BASE_URL}/api/v1/ohlcv/batch",
            json={
                "codes": ["000300.SH", "510300.SH"],
                "start": "2024-01-01",
                "end": "2024-01-31"
            },
            timeout=60
        )
        data = response.json()
        print(f"   成功: {data.get('success_count')}/{data.get('total')}")
        print(f"   失败: {data.get('failed_count')}/{data.get('total')}")
        
        for code, result in data.get('results', {}).items():
            if 'error' in result:
                print(f"   ✗ {code}: {result['error']}")
            else:
                print(f"   ✓ {code}: {result['count']} 条")
    except Exception as e:
        print(f"   ✗ 失败: {e}")
    
    # 测试6: 支持的代码
    print("\n6. 测试获取支持的代码...")
    try:
        response = requests.get(f"{BASE_URL}/api/v1/supported-codes", timeout=5)
        data = response.json()
        print(f"   支持的资产类型: {len(data)} 种")
        for asset_type, info in list(data.items())[:3]:
            print(f"   - {asset_type}: {info.get('description')}")
            print(f"     示例: {', '.join(info.get('examples', [])[:3])}")
    except Exception as e:
        print(f"   ✗ 失败: {e}")
    
    print("\n" + "="*60)
    print("测试完成")
    print("="*60)


if __name__ == "__main__":
    print("\n" + "="*60)
    print("Flask API 测试客户端")
    print("="*60)
    print("\n请确保 Flask 服务已启动:")
    print("   ./start_flask_server.sh")
    print("或")
    print("   python core/datasource/flask_server.py")
    print("")
    
    test_api()
