#!/usr/bin/env python
"""
@Contact :   liuyuqi.gov@msn.cn
@Time    :   2024/03/19 16:50:59
@License :   Copyright © 2017-2022 liuyuqi. All Rights Reserved.
@Desc    :
"""
from apps.config import settings
from apps.extensions.hook import (init_banner, init_middlewares, register_db,
                                 register_exception_handlers, register_routes)

from fastapi import FastAPI
from fastapi.routing import APIRoute
from fastapi.staticfiles import StaticFiles
from apps.websocket import socket_app
def custom_generate_unique_id(route: APIRoute) -> str:
    return f"{route.tags[0]}-{route.name}"


def create_app(config_name="dev") -> FastAPI:
    """
    return FastAPI instance
    """
    fastapp = FastAPI(
        title=settings.PROJECT_NAME,
        description=settings.PROJECT_NAME,
        # version= settings.API_VERSION,
        openapi_url=f"{settings.API_V1_STR}/openapi.json",
        docs_url="/docs",
        redoc_url="/redoc",
        generate_unique_id_function=custom_generate_unique_id,
    )
    init_banner()
    init_middlewares(app=fastapp)
    register_db(app=fastapp)
    register_exception_handlers(app=fastapp)
    register_routes(app=fastapp)
    
    fastapp.mount("/static", StaticFiles(directory="./static"), name="static")
    fastapp.mount('/', socket_app)
    return fastapp