#!/usr/bin/env python3
"""
Скрипт для проверки API ключа и доступности Flightradar24 API
"""

import os
import sys
import json
import requests
from datetime import datetime

def check_api_key(api_key):
    """Проверка валидности API ключа"""
    
    print("🔑 Проверка API ключа Flightradar24...")
    print(f"   Ключ: {api_key[:10]}...{api_key[-4:] if len(api_key) > 14 else '***'}")
    print()
    
    # Базовый URL API
    base_url = "https://api.flightradar24.com/common/v1"
    
    # Подготовка заголовков
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    # Тестовые запросы (минимальные по кредитам)
    test_endpoints = [
        ("/airport/light/SVO", "Аэропорт Шереметьево (light)"),
        ("/airline/light/AFL", "Авиакомпания Аэрофлот (light)"),
        ("/usage", "Отчет об использовании API"),
    ]
    
    results = []
    total_credits_used = 0
    
    for endpoint, description in test_endpoints:
        try:
            url = base_url + endpoint
            print(f"🔍 Тест: {description}")
            print(f"   Endpoint: {endpoint}")
            
            response = requests.get(url, headers=headers, timeout=10)
            
            if response.status_code == 200:
                data = response.json()
                
                # Проверка структуры ответа
                if endpoint == "/usage":
                    credits_used = data.get("credits_used", 0)
                    credits_total = data.get("credits_total", 60000)
                    total_credits_used = credits_used
                    
                    print(f"   ✅ Успешно (кредитов использовано: {credits_used:,}/{credits_total:,})")
                    
                    # Определение типа подписки
                    if credits_total >= 1000000:
                        subscription = "Advanced или выше"
                    elif credits_total >= 100000:
                        subscription = "Essential"
                    elif credits_total >= 60000:
                        subscription = "Explorer (промо до 120k)"
                    else:
                        subscription = "Неизвестный тариф"
                    
                    print(f"   💳 Тариф: {subscription} ({credits_total:,} кредитов/месяц)")
                    
                else:
                    # Для других endpoints проверяем наличие данных
                    if data.get("data") or "name" in data:
                        print(f"   ✅ Успешно (данные получены)")
                    else:
                        print(f"   ⚠️  Ответ получен, но данных нет")
                
                results.append((endpoint, True, response.status_code, None))
                
            elif response.status_code == 401:
                print(f"   ❌ Ошибка 401: Неавторизован (неверный API ключ)")
                results.append((endpoint, False, response.status_code, "Invalid API key"))
                break
                
            elif response.status_code == 403:
                print(f"   ❌ Ошибка 403: Доступ запрещен (недостаточно прав или кредитов)")
                results.append((endpoint, False, response.status_code, "Access denied"))
                
            elif response.status_code == 404:
                print(f"   ⚠️  Ошибка 404: Endpoint не найден (возможно устаревший)")
                results.append((endpoint, False, response.status_code, "Not found"))
                
            elif response.status_code == 429:
                print(f"   ⚠️  Ошибка 429: Слишком много запросов (лимит rate limiting)")
                results.append((endpoint, False, response.status_code, "Rate limited"))
                
            else:
                print(f"   ❌ Ошибка {response.status_code}: {response.text[:100]}")
                results.append((endpoint, False, response.status_code, response.text[:100]))
                
        except requests.exceptions.Timeout:
            print(f"   ❌ Таймаут соединения")
            results.append((endpoint, False, "Timeout", "Connection timeout"))
        except requests.exceptions.ConnectionError:
            print(f"   ❌ Ошибка соединения")
            results.append((endpoint, False, "ConnectionError", "Network error"))
        except Exception as e:
            print(f"   ❌ Неожиданная ошибка: {e}")
            results.append((endpoint, False, "Exception", str(e)))
        
        print()
    
    # Сводка результатов
    print("=" * 60)
    print("📊 Сводка проверки API:")
    print()
    
    successful_tests = sum(1 for _, success, _, _ in results if success)
    total_tests = len(results)
    
    print(f"✅ Успешных тестов: {successful_tests}/{total_tests}")
    
    if successful_tests > 0:
        print("🎉 API ключ валиден и работает!")
        
        # Дополнительная информация
        print()
        print("📈 Информация о подписке:")
        
        # Проверка типа подписки через usage endpoint
        try:
            response = requests.get(base_url + "/usage", headers=headers, timeout=5)
            if response.status_code == 200:
                usage_data = response.json()
                credits_total = usage_data.get("credits_total", 0)
                
                # Определение тарифа
                if credits_total >= 1000000:
                    tariff = "Advanced или Business"
                    features = "Полный доступ ко всем endpoints"
                elif credits_total >= 100000:
                    tariff = "Essential"
                    features = "Расширенный доступ, но без некоторых count endpoints"
                elif credits_total >= 60000:
                    tariff = "Explorer"
                    features = "Базовый доступ (60k кредитов/мес)"
                    if credits_total >= 120000:
                        tariff += " (промо до 120k)"
                else:
                    tariff = "Неизвестный тариф"
                    features = "Проверьте документацию"
                
                print(f"   💳 Тариф: {tariff}")
                print(f"   🎯 Кредитов в месяц: {credits_total:,}")
                print(f"   📋 Возможности: {features}")
                
                # Рекомендации по использованию кредитов
                print()
                print("💡 Рекомендации по использованию:")
                print(f"   - Средний запрос: 5-50 кредитов")
                print(f"   - Примерное количество запросов: {credits_total // 50:,} в месяц")
                print(f"   - Экономьте кредиты: используйте light endpoints и кэширование")
                
        except:
            print("   ⚠️  Не удалось получить детальную информацию о тарифе")
    
    else:
        print("❌ API ключ не работает. Возможные причины:")
        print("   - Неверный API ключ")
        print("   - Подписка не активирована")
        print("   - Закончились кредиты")
        print("   - Проблемы с сетью")
        print()
        print("🔧 Решение:")
        print("   1. Проверьте правильность API ключа")
        print("   2. Убедитесь, что подписка Explorer активна")
        print("   3. Проверьте баланс кредитов в личном кабинете")
    
    print()
    print("🔗 Полезные ссылки:")
    print("   - Документация API: https://fr24api.flightradar24.com/")
    print("   - Подписки и кредиты: https://fr24api.flightradar24.com/subscriptions-and-credits")
    print("   - Поддержка: https://support.fr24.com/")
    
    return successful_tests > 0

def main():
    print("=== Flightradar24 API Validator ===")
    print("Проверка валидности API ключа и доступности сервиса")
    print()
    
    # Получение API ключа
    api_key = os.getenv("FLIGHTRADAR24_API_KEY")
    
    if not api_key:
        print("❌ Переменная окружения FLIGHTRADAR24_API_KEY не установлена")
        print()
        print("Установите API ключ командой:")
        print("  export FLIGHTRADAR24_API_KEY='your_api_key_here'")
        print()
        print("Или запустите скрипт с ключом:")
        print("  FLIGHTRADAR24_API_KEY='your_key' python3 check_api.py")
        sys.exit(1)
    
    # Проверка формата ключа (базовая)
    if len(api_key) < 20:
        print("⚠️  API ключ слишком короткий. Убедитесь в правильности.")
    
    # Выполнение проверки
    is_valid = check_api_key(api_key)
    
    # Возвращаем соответствующий код выхода
    if is_valid:
        print("\n✅ Проверка завершена успешно")
        sys.exit(0)
    else:
        print("\n❌ Проверка не пройдена")
        sys.exit(1)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n⏹ Проверка прервана пользователем")
        sys.exit(1)
    except Exception as e:
        print(f"\n❌ Неожиданная ошибка: {e}")
        sys.exit(2)