from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
import os
import warnings

# Pydantic 직렬화 경고 무시 설정
warnings.filterwarnings("ignore", message=".*Pydantic serializer warnings.*")

# ── APP_PREFIX 読み込み ──
from app.core.config import APP_PREFIX

API_PREFIX = f"/{APP_PREFIX}/api"

# ── ラウター Import ──
from app.routers.auth_router import router as auth_router
from app.routers.onboarding_router import router as onboarding_router
from app.routers.findgoal_router import router as findgoal_router
from app.routers.mbti_router import router as mbti_router
from app.routers.spi_router import router as spi_router
from app.routers.it_router import router as it_router
from app.routers.studyplan_router import router as studyplan_router
from app.routers.summary_router import router as summary_router
from app.routers.curriculum_router import router as curriculum_router, file_router as curriculum_file_router
from app.routers.general_router import router as general_router
from app.routers.report_router import router as report_router
from app.routers.note_router import router as note_router
from app.routers.chat_log_router import router as chat_log_router
from app.routers.selfpr_router import router as selfpr_router
from app.routers.weather_router import router as weather_router
from app.routers.company_info_router import router as company_info_router
from app.routers.interview_router import router as interview_router
from app.routers.capture_router import router as capture_router
from app.routers.quiz_router import router as quiz_router
from app.routers.python_router import router as python_router
from app.routers.stt_router import router as stt_router
from app.routers.goalskill_router import router as goalskill_router
from app.models.note_module import ensure_study_note_table

app = FastAPI()

# CORS 설정
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# ── ラウター登録 (動的 prefix) ──
# リソース別prefixあり
app.include_router(auth_router,              prefix=f"{API_PREFIX}/auth")
app.include_router(onboarding_router,        prefix=f"{API_PREFIX}/onboarding")
app.include_router(findgoal_router,          prefix=f"{API_PREFIX}/findgoal")
app.include_router(mbti_router,              prefix=f"{API_PREFIX}/MBTI")
app.include_router(spi_router,               prefix=f"{API_PREFIX}/spi")
app.include_router(it_router,                prefix=f"{API_PREFIX}/it")
app.include_router(studyplan_router,         prefix=f"{API_PREFIX}/studyplan")
app.include_router(summary_router,           prefix=f"{API_PREFIX}/summary")
app.include_router(curriculum_router,        prefix=f"{API_PREFIX}/curriculum")
app.include_router(curriculum_file_router,   prefix=f"{API_PREFIX}/file")
app.include_router(selfpr_router,            prefix=f"{API_PREFIX}/selfpr")
app.include_router(weather_router,           prefix=f"{API_PREFIX}/weather")
app.include_router(company_info_router,      prefix=f"{API_PREFIX}/companyinfo")
app.include_router(interview_router,         prefix=f"{API_PREFIX}/interview")

# リソースprefix なし (直接 API_PREFIX 下に配置)
app.include_router(general_router,           prefix=f"{API_PREFIX}")
app.include_router(report_router,            prefix=f"{API_PREFIX}")
app.include_router(note_router,              prefix=f"{API_PREFIX}")
app.include_router(chat_log_router,          prefix=f"{API_PREFIX}")
app.include_router(capture_router,           prefix=f"{API_PREFIX}")
app.include_router(quiz_router,              prefix=f"{API_PREFIX}")
app.include_router(python_router,            prefix=f"{API_PREFIX}")
app.include_router(stt_router,               prefix=f"{API_PREFIX}")
app.include_router(goalskill_router,         prefix=f"{API_PREFIX}")

# DB テーブル自動作成 (アプリ起動時1回)
ensure_study_note_table()

# プロントエンド静的ファイル連結
current_dir = os.path.dirname(os.path.abspath(__file__))
front_path = os.path.join(os.path.dirname(current_dir), "front")

if os.path.exists(front_path):
    app.mount("/", StaticFiles(directory=front_path, html=True), name="static")

# アップロードフォルダ静的サービング追加
upload_path = os.path.join(current_dir, "uploads")
if not os.path.exists(upload_path):
    os.makedirs(upload_path)
app.mount("/uploads", StaticFiles(directory=upload_path), name="uploads")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=5330, log_level="debug")