# Load environment variables FIRST, before any imports that need them
import logging
import os

from dotenv import load_dotenv
from fastmcp import FastMCP

# Setup logging early
logging.basicConfig(
    level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)

# Load base configuration from .env
BASE_ENV_LOADED = load_dotenv()
if BASE_ENV_LOADED:
    logger.info("✅ Loaded base .env file")
else:
    logger.info("ℹ️  No base .env file found")

# Path to read secret variables from Flava MCP hub
SECRETS_ENV_PATH = "/etc/faas/secrets/.env"
if os.path.isfile(SECRETS_ENV_PATH):
    load_dotenv(SECRETS_ENV_PATH, override=True)
    logger.info("✅ Loaded secrets from %s", SECRETS_ENV_PATH)
else:
    logger.info("ℹ️  Secrets file not found: %s", SECRETS_ENV_PATH)

# Import after environment variables are loaded
from products.mcp.jira import get_jira_mcp_server
from products.mcp.flava_function import get_flava_function_mcp_server


def main():
    """Run the FastMCP server with mounted Jira and Flava Function servers"""

    # Create main MCP server
    logger.info("🏗️  Creating main MCP server...")
    main_mcp = FastMCP("CQA Main MCP Server")

    # Get individual servers
    try:
        logger.info("📦 Initializing Jira MCP server...")
        jira_server = get_jira_mcp_server()
        logger.info("✅ Jira MCP server created successfully")

        logger.info("📦 Initializing Flava Function MCP server...")
        flava_server = get_flava_function_mcp_server()
        logger.info("✅ Flava Function MCP server created successfully")

        # Mount servers (using new FastMCP API)
        logger.info("🔗 Mounting Jira server...")
        main_mcp.mount(jira_server)
        logger.info("✅ Mounted Jira MCP server at 'jira' namespace")

        logger.info("🔗 Mounting Flava Function server...")
        main_mcp.mount(flava_server)
        logger.info("✅ Mounted Flava Function MCP server at 'flava' namespace")

        logger.info("🔧 Successfully created main MCP server with mounted services")

    except Exception as mount_exception:
        logger.error("❌ Error mounting servers: %s", str(mount_exception))
        # Fallback: just use the jira server if mounting fails
        logger.warning("🔄 Falling back to Jira-only server")
        main_mcp = get_jira_mcp_server()

    # Configure server settings
    try:
        port = int(os.getenv("MCP_PORT", "8001"))
    except ValueError:
        logger.warning("⚠️  Invalid MCP_PORT value, using default port 8001")
        port = 8001

    host = os.getenv("MCP_HOST", "0.0.0.0")

    logger.info("🚀 Starting CQA Main MCP Server on %s:%s", host, port)
    logger.info("📍 Available endpoints:")
    logger.info("   - HTTP: http://%s:%s/mcp", host, port)
    logger.info("🛠️  Mounted services:")
    logger.info("   - jira.* : Jira integration tools")
    logger.info("   - flava.* : Flava Function integration tools")

    # Run FastMCP server with HTTP transport
    try:
        logger.info("🔄 Attempting to start MCP server...")
        main_mcp.run(transport="http", host=host, port=port, path="/mcp")
    except Exception as server_exception:
        logger.error("❌ Failed to start MCP server: %s", str(server_exception))
        logger.error("💥 Server startup failed - check configuration and dependencies")
        raise


if __name__ == "__main__":
    main()
