import sys

import uvicorn

from src.config.settings import settings_instance


def main():
    # Parse port from command line or use default
    if len(sys.argv) > 1:
        try:
            port = int(sys.argv[1])
        except ValueError:
            print(f"Error: Invalid port number '{sys.argv[1]}'", file=sys.stderr)
            sys.exit(1)

        try:
            reload = bool(sys.argv[2])
        except:
            reload = settings_instance.RELOAD

    else:
        port = settings_instance.PROJECT_PORT
        reload = settings_instance.RELOAD

    uvicorn.run(
        "src.app:app",
        host=settings_instance.PROJECT_URL,  # e.g., "0.0.0.0" or "127.0.0.1"
        port=port,  # e.g., 8000
        log_level="info",  # Uvicorn logging level
        workers=settings_instance.WORKERS,  # number of worker processes
        reload=reload,  # auto-reload in dev
        # Production settings
        access_log=True,
        proxy_headers=True,  # Trust X-Forwarded-* headers from reverse proxy
        forwarded_allow_ips="*",  # Allow forwarded headers from any proxy
        # Timeouts
        timeout_keep_alive=30,
        # Limits
        limit_concurrency=1000,  # Max concurrent connections per worker
        limit_max_requests=10000,  # Restart worker after N requests (memory leak protection)
    )


if __name__ == "__main__":
    main()
