import sys,os
current_path = os.getcwd()
sys.path.append(current_path+"\\web")
sys.path.append(current_path+"\\agent")

import json
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.openapi.docs import (
    get_redoc_html,
    get_swagger_ui_html,
    get_swagger_ui_oauth2_redirect_html,
)
def save_api_spec(app: FastAPI):
    """
    保存 FastAPI 应用的 OpenAPI 规范到文件中。
    """
    from fastapi.openapi.utils import get_openapi
    import yaml
    openapi_schema = get_openapi(
        title="FastAPI - Swagger UI",
        version="1.0.0",
        routes=app.routes
    )
    print(app.routes)
    # 将 JSON 转换为 YAML
    yaml_data = yaml.dump(openapi_schema, sort_keys=False)

    # 保存为 YAML 文件
    with open("openapi.yaml", "w") as f:
        f.write(yaml_data)

    print("OpenAPI YAML 文件已生成：openapi.yaml")
    
import logging
logging.basicConfig(level=logging.INFO)

handler = logging.FileHandler('/app/logs/api-server.log', mode='w',encoding="utf-8")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logging.getLogger().addHandler(handler)
app = FastAPI(title="知识图谱自构建平台系统",
    description="知识图谱自构建平台系统API",
    version="1.0.0",
    root_path="/open-platform",
    docs_url=None,
    redoc_url=None)
# 允许所有来源的跨域请求
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

from router.task_router import task_router
app.include_router(task_router)

from router.file_router import file_router
app.include_router(file_router)

from router.user_router import user_router
app.include_router(user_router)

# from router.graph_mgr_router import graph_mgr_router
# app.include_router(graph_mgr_router)

from router.kb_router import kb_router
app.include_router(kb_router)
#from router.graph_router import graph_router
#app.include_router(graph_router)

#app.include_router(dify_kb_router)

from router.knowledge_base_router import knowledge_base_router
app.include_router(knowledge_base_router)

from router.graph_router import graph_router
app.include_router(graph_router)
save_api_spec(app)

app.mount("/static", StaticFiles(directory="static"), name="static")


# 定义一个异步函数，用于返回自定义的Swagger UI HTML页面
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():
    # 调用get_swagger_ui_html函数，传入openapi_url、title、oauth2_redirect_url、swagger_js_url和swagger_css_url参数
    return get_swagger_ui_html(
        openapi_url=app.openapi_url,
        title=app.title + " - Swagger UI",
        oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
        swagger_js_url="/open-platform/static/swagger-ui-bundle.js",
        swagger_css_url="/open-platform/static/swagger-ui.css",
    )


@app.get(app.swagger_ui_oauth2_redirect_url, include_in_schema=False)
async def swagger_ui_redirect():
    return get_swagger_ui_oauth2_redirect_html()


@app.get("/redoc", include_in_schema=False)
async def redoc_html():
    return get_redoc_html(
        openapi_url=app.openapi_url,
        title=app.title + " - ReDoc",
        redoc_js_url="/open-platform/static/redoc.standalone.js",
    )