#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
test_sqlite_api.py
Script para testar a configuração da API SQLite
"""

import sys
import json
import requests
from pathlib import Path
from datetime import datetime
import pytz

def main():
    print("\n" + "=" * 70)
    print("🧪 TESTE DE CONFIGURAÇÃO - API SQLite")
    print("=" * 70)
    
    # 1. Verificar se config_sqlite_api existe
    print("\n[1] Verificando módulo de configuração...")
    try:
        from config_sqlite_api import obter_url_api, obter_ambiente, sqlite_config
        print(f"    ✓ Módulo importado com sucesso")
        print(f"    📍 Ambiente detectado: {obter_ambiente().upper()}")
        print(f"    🔗 URL da API: {obter_url_api()}")
    except ImportError as e:
        print(f"    ✗ Erro ao importar: {e}")
        sys.exit(1)
    
    # 2. Verificar arquivo config_api.json
    print("\n[2] Verificando arquivo de configuração...")
    config_file = Path('config_api.json')
    if config_file.exists():
        print(f"    ✓ Arquivo encontrado: {config_file.absolute()}")
        try:
            with open(config_file, 'r', encoding='utf-8') as f:
                config = json.load(f)
            print(f"    ✓ JSON válido")
            for env in ['desenvolvimento', 'producao']:
                if env in config:
                    url = config[env].get('sqlite_api_url', 'N/A')
                    print(f"      - {env}: {url}")
        except json.JSONDecodeError as e:
            print(f"    ✗ JSON inválido: {e}")
    else:
        print(f"    ⚠ Arquivo não encontrado (usando URL padrão)")
    
    # 3. Testar conectividade com a API
    print("\n[3] Testando conectividade com a API...")
    url_api = obter_url_api()
    
    try:
        print(f"    🔄 POST para {url_api}...")
        
        # Teste com método 'stats' (não requer dados)
        payload = {'metodo': 'stats'}
        response = requests.post(url_api, json=payload, timeout=5)
        
        print(f"    Status HTTP: {response.status_code}")
        
        if response.status_code == 200:
            print(f"    ✓ API respondeu com sucesso!")
            try:
                data = response.json()
                print(f"    📊 Resposta (primeiras chaves):")
                for key in list(data.keys())[:5]:
                    print(f"       - {key}")
            except:
                print(f"    ⚠ Resposta não é JSON válido")
                print(f"    Resposta: {response.text[:200]}")
        elif response.status_code == 404:
            print(f"    ✗ Erro 404 - Arquivo não encontrado")
            print(f"    ⚠ Verificar:")
            print(f"       - URL está correta?")
            print(f"       - Arquivo api.php existe no servidor?")
            print(f"       - Documento root está correto?")
        else:
            print(f"    ✗ Erro HTTP {response.status_code}")
            print(f"    Resposta: {response.text[:200]}")
    
    except requests.exceptions.ConnectionError:
        print(f"    ✗ Erro de conexão")
        print(f"    ⚠ O servidor está acessível?")
        print(f"       URL: {url_api}")
    except requests.exceptions.Timeout:
        print(f"    ✗ Timeout (requisição demorou muito)")
    except Exception as e:
        print(f"    ✗ Erro: {e}")
    
    # 4. Testar registro de trade
    print("\n[4] Testando registro de trade...")
    try:
        timezone = pytz.timezone("America/Sao_Paulo")
        payload = {
            'metodo': 'registrar',
            'moeda': 'BTC',
            'tipo': 'teste_conexao',
            'preco': 45000.00,
            'quantidade': 0.001,
            'valor': 45.00
        }
        
        print(f"    🔄 Registrando trade de teste...")
        print(f"       Moeda: {payload['moeda']}")
        print(f"       Valor: ${payload['valor']}")
        
        response = requests.post(url_api, json=payload, timeout=5)
        
        if response.status_code == 200:
            data = response.json()
            if data.get('sucesso'):
                print(f"    ✓ Trade registrado com sucesso!")
                print(f"       ID: {data.get('trade_id')}")
            else:
                print(f"    ✗ Erro ao registrar: {data.get('erro')}")
        else:
            print(f"    ✗ HTTP {response.status_code}: {response.text[:100]}")
    
    except Exception as e:
        print(f"    ✗ Erro: {e}")
    
    # 5. Resumo
    print("\n" + "=" * 70)
    print("📋 RESUMO")
    print("=" * 70)
    print(f"Ambiente:     {obter_ambiente().upper()}")
    print(f"URL API:      {obter_url_api()}")
    print(f"Arquivo config: {config_file.absolute() if config_file.exists() else 'NÃO ENCONTRADO'}")
    print("=" * 70 + "\n")
    
    print("✅ Teste concluído!")
    print("\nPróximos passos:")
    print("1. Se tudo passou: execute 'python rex.py'")
    print("2. Se houver erro 404:")
    print("   - Verificar URL em config_api.json")
    print("   - Ou definir: export SQLITE_API_URL='https://seu-servidor/api.php'")
    print("3. Consulte GUIA_CONFIGURACAO_PRODUCAO.md para mais detalhes")

if __name__ == '__main__':
    main()
