from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
import os
from pathlib import Path
import uvicorn
from mooc.db.database import init_db
from mooc.api.v1.api import api_router
from mooc.core.config import settings
from mooc.core.logger import setup_logging, get_logger

app = FastAPI(
    title="ExamService",
    description="题库小程序服务端API",
    version="1.0.0"
)

# 初始化日志系统
setup_logging(app)
logger = get_logger(__name__)

# CORS设置
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 初始化数据库
init_db()
logger.info("Database initialized")

# 确保上传目录存在
upload_dir = settings.UPLOAD_IMG_DIR
if not os.path.isabs(upload_dir):
    # 获取当前工作目录
    base_dir = os.path.dirname(os.path.abspath(__file__))
    upload_dir = os.path.join(base_dir, upload_dir.lstrip('/'))

os.makedirs(upload_dir, exist_ok=True)
logger.info(f"Static files directory: {upload_dir}")

# 挂载静态文件目录
# 注意:这里的'/attachment'必须与你在URL中使用的路径一致
app.mount("/attachment", StaticFiles(directory=upload_dir), name="attachment")

app.include_router(api_router, prefix=settings.API_V1_STR)
logger.info(f"API routes registered with prefix: {settings.API_V1_STR}")

@app.get("/")
async def root():
    return {"message": f"Welcome to {settings.PROJECT_NAME} API"}

if __name__ == '__main__':
    logger.info("Starting server...")
    uvicorn.run('main:app', host='0.0.0.0', port=2333, reload=True, workers=1)