import os
from pathlib import Path
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles
from sqlalchemy.exc import SQLAlchemyError

from app.config import settings
from app.routers import router
from app.core import Base, engine

# Создаем таблицы в базе данных
Base.metadata.create_all(bind=engine)

# Создаем экземпляр приложения FastAPI
app = FastAPI(
    title="Dressed for Success API",
    description="API для интернет-магазина одежды",
    version="1.0.0"
)

# Настраиваем CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # В продакшене нужно указать конкретные домены
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Обработка ошибок SQLAlchemy
@app.exception_handler(SQLAlchemyError)
async def sqlalchemy_exception_handler(request: Request, exc: SQLAlchemyError):
    return JSONResponse(
        status_code=500,
        content={"detail": "Ошибка базы данных", "error": str(exc)},
    )

# Подключаем роутеры
app.include_router(router, prefix="/api")

# Создаем директорию для загрузок, если она не существует
uploads_dir = Path(settings.UPLOAD_DIRECTORY)
uploads_dir.mkdir(parents=True, exist_ok=True)

# Монтируем статические файлы
app.mount("/uploads", StaticFiles(directory=settings.UPLOAD_DIRECTORY), name="uploads")

# Корневой маршрут
@app.get("/")
async def root():
    return {"message": "Добро пожаловать в API интернет-магазина Dressed for Success"} 