import uvicorn

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from client.routers import client_router
from client.config import settings
from fastapi.middleware.cors import CORSMiddleware


def create_app() -> FastAPI:
    """Create and configure the FastAPI application."""
    app = FastAPI(
        title="Client Service",
        description="PPAI HACKATHON",
        version="1.0.0",
    )
    app.add_middleware(
        CORSMiddleware,
        allow_origins=["*"],  # Allows all origins
        allow_credentials=True,
        allow_methods=["*"],  # Allows all methods
        allow_headers=["*"],  # Allows all headers
    )
    app.include_router(router=client_router)
    app.mount("/static", StaticFiles(directory="client/static"), name="static")
    return app


def main() -> None:
    """Main function to set up logging and run the server."""
    app: FastAPI = create_app()

    uvicorn.run(app=app, host="0.0.0.0", port=settings.SERVICE_PORT)  # type: ignore


if __name__ == "__main__":
    main()