#!/usr/bin/env python3
"""
Startup utilities for MCP server to handle gateway readiness and connection issues.
"""

import os
import time
import logging
import requests
from typing import Optional

logger = logging.getLogger(__name__)


def wait_for_gateway(gateway_url: str, max_retries: int = 10, retry_delay: int = 5) -> bool:
    """
    Wait for the gateway to become available.
    
    Args:
        gateway_url: The gateway URL to check
        max_retries: Maximum number of retry attempts
        retry_delay: Delay between retries in seconds
        
    Returns:
        True if gateway is available, False otherwise
    """
    health_url = f"{gateway_url}/health"
    
    for attempt in range(max_retries):
        try:
            response = requests.get(health_url, timeout=10)
            if response.status_code == 200:
                logger.info(f"Gateway is ready at {gateway_url}")
                return True
        except requests.exceptions.RequestException as e:
            logger.debug(f"Gateway not ready (attempt {attempt + 1}/{max_retries}): {e}")
        
        if attempt < max_retries - 1:
            time.sleep(retry_delay)
    
    logger.error(f"Gateway at {gateway_url} did not become ready after {max_retries} attempts")
    return False


def apply_startup_delay():
    """Apply startup delay if configured in environment."""
    startup_delay = int(os.environ.get('STARTUP_DELAY', '0'))
    if startup_delay > 0:
        logger.info(f"Applying startup delay of {startup_delay} seconds...")
        time.sleep(startup_delay)


def ensure_gateway_ready():
    """Ensure gateway is ready before proceeding."""
    # Apply initial delay if configured
    apply_startup_delay()
    
    # Get gateway configuration
    gateway_url = os.environ.get('GATEWAY_URL', 'http://gateway:8000')
    max_retries = int(os.environ.get('CONNECTION_MAX_RETRIES', '10'))
    retry_delay = int(os.environ.get('CONNECTION_RETRY_DELAY', '5'))
    
    # Wait for gateway
    if not wait_for_gateway(gateway_url, max_retries, retry_delay):
        raise RuntimeError("Gateway is not available")