from fastapi import FastAPI
import uvicorn
import aiomysql
from src.api.endpoints import router as api_endpoint_router
from starlette.middleware.cors import CORSMiddleware
from src.config import settings
import json


def initialize_backend_application() -> FastAPI:
    DOCS_URL: str = "/docs"
    OPENAPI_URL: str = f"/openapi.json"
    REDOC_URL: str = "/redoc"
    OPENAPI_PREFIX: str = ""

    app = FastAPI(
        title="shops_backend",
        version="0.1",
        openapi_prefix=OPENAPI_PREFIX,
        redoc_url=REDOC_URL,
        openapi_url=OPENAPI_URL,
        docs_url=DOCS_URL
    )

    app.include_router(router=api_endpoint_router, prefix="/shops")

    return app


backend_app: FastAPI = initialize_backend_application()

if __name__ == "__main__":
    # extract setting to json file
    uvicorn.run(
        app="main:backend_app",
        host=settings.host,
        port=settings.port,
        workers=4,
        reload=True
    )
