#!/usr/bin/env python3
"""
Découvre l'API REST ApolloX en testant différents endpoints
"""

import requests
import os
from dotenv import load_dotenv

load_dotenv()

WALLET_ADDRESS = os.getenv('WALLET_ADDRESS', '0x7476737C49d55bea691e54c2c96fD39a6bAf3049')

# Endpoints possibles basés sur les patterns courants
API_ENDPOINTS = [
    # API principale
    "https://api.apollox.finance",
    "https://www.apollox.finance/api",
    "https://bapi.apollox.finance",
    "https://fapi.apollox.finance",

    # API V2
    "https://api.apollox.finance/v2",
    "https://www.apollox.finance/api/v2",

    # API BNB Chain
    "https://api-bnb.apollox.finance",
    "https://bnb-api.apollox.finance",
]

# Paths possibles
API_PATHS = [
    f"/user/positions",
    f"/user/trades",
    f"/user/history",
    f"/position/history",
    f"/trade/history",
    f"/orders",
    f"/account/positions",
    f"/perpetual/positions",
    f"/perpetual/history",
]


def test_endpoint(base_url: str, path: str) -> dict:
    """Teste un endpoint"""

    url = f"{base_url}{path}"

    # Test avec wallet dans params
    params = {'address': WALLET_ADDRESS}

    try:
        response = requests.get(url, params=params, timeout=5)
        return {
            'url': url,
            'status': response.status_code,
            'success': response.status_code == 200,
            'content_type': response.headers.get('content-type', ''),
            'size': len(response.content),
            'response': response.text[:200] if response.status_code == 200 else None
        }
    except Exception as e:
        return {
            'url': url,
            'error': str(e)
        }


def main():
    print("=" * 80)
    print("🔍 DÉCOUVERTE API REST APOLLOX")
    print("=" * 80)
    print()
    print(f"Wallet: {WALLET_ADDRESS}\n")

    results = []

    total = len(API_ENDPOINTS) * len(API_PATHS)
    print(f"Testing {total} endpoints...\n")

    for base_url in API_ENDPOINTS:
        print(f"🌐 {base_url}")

        for path in API_PATHS:
            result = test_endpoint(base_url, path)

            if result.get('success'):
                print(f"   ✅ {path} - {result['status']}")
                print(f"      Type: {result['content_type']}")
                print(f"      Size: {result['size']} bytes")
                if result.get('response'):
                    print(f"      Preview: {result['response'][:100]}...")
                print()
                results.append(result)
            elif result.get('status'):
                if result['status'] in [401, 403]:
                    print(f"   🔒 {path} - {result['status']} (Auth required)")
                elif result['status'] == 404:
                    print(f"   ❌ {path} - 404")
                else:
                    print(f"   ⚠️  {path} - {result['status']}")
            else:
                print(f"   💤 {path} - {result.get('error', 'timeout')[:50]}")

        print()

    # Résumé
    print("=" * 80)
    print("📊 RÉSUMÉ")
    print("=" * 80)

    if results:
        print(f"✅ {len(results)} endpoints valides trouvés:\n")
        for r in results:
            print(f"   {r['url']}")
            print(f"      Status: {r['status']}")
            print(f"      Type: {r['content_type']}")
            print()
    else:
        print("❌ Aucun endpoint valide trouvé")
        print()
        print("Solution alternative:")
        print("1. Ouvrir l'interface web ApolloX dans votre navigateur")
        print("2. Ouvrir DevTools (F12) > Network")
        print("3. Afficher votre historique de positions")
        print("4. Chercher les requêtes XHR/Fetch vers l'API")
        print("5. Copier l'URL de l'API ici")


if __name__ == '__main__':
    main()
