from fastapi import FastAPI  # Import FastAPI framework
from fastapi.middleware.gzip import GZipMiddleware  # Import GZipMiddleware for response compression
from fastapi.middleware.cors import CORSMiddleware  # Import CORSMiddleware for CORS support
from fastapi.middleware.trustedhost import TrustedHostMiddleware  # Import TrustedHostMiddleware for security

from config import AppConfig  # Import the AppConfig class from config.py

def create_app():
    # Initialize FastAPI app
    app = FastAPI(
        title=AppConfig.TITLE,
        description=AppConfig.DESCRIPTION,
        version=AppConfig.VERSION,
        debug=AppConfig.DEBUG,
    )

    # CORS (Cross-Origin Resource Sharing) Configuration
    app.add_middleware(
        CORSMiddleware,
        allow_origins=AppConfig.ALLOWED_ORIGINS,
        allow_methods=AppConfig.ALLOWED_METHODS,
        allow_headers=AppConfig.ALLOWED_HEADERS,
        expose_headers=AppConfig.EXPOSED_HEADERS,
    )

    # Trusted Hosts Middleware Configuration
    app.add_middleware(
        TrustedHostMiddleware,
        allowed_hosts=AppConfig.ALLOWED_HOSTS,
    )

    # GZip Middleware Configuration
    app.add_middleware(
        GZipMiddleware,
        minimum_size=AppConfig.GZIP_MIN_SIZE,
    )

    # Include routers and other app configurations here 
    
    from app.routes.api.health import router as health_router  # Import your health router
    app.include_router(health_router)

    from app.routes.api.v1.audio import router as audio_router_v1  # Import your audio router
    app.include_router(audio_router_v1)

    from app.routes.api.v2.audio import router as audio_router_v2  # Import your audio router
    app.include_router(audio_router_v2)

    return app
 
