from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from contextlib import asynccontextmanager
import os

from app.core.config import settings
from app.api.v1.router import api_router


@asynccontextmanager
async def lifespan(app: FastAPI):
    """Uygulama başlatıldığında ve kapatıldığında çalışır."""
    # Uploads dizini oluştur
    os.makedirs(os.path.join(settings.UPLOAD_DIR, "avatars"), exist_ok=True)
    os.makedirs(os.path.join(settings.UPLOAD_DIR, "files"), exist_ok=True)
    print(f"🐯 KaplanOS Backend başlatıldı — {settings.APP_ENV} ortamı")
    yield
    print("🐯 KaplanOS Backend kapatıldı")


app = FastAPI(
    title="KaplanOS API",
    description="KaplanOS kişisel işletim sistemi API'si — Türkçe, modern, modüler",
    version="1.0.0",
    docs_url="/docs",
    redoc_url="/redoc",
    lifespan=lifespan,
)

# CORS middleware
app.add_middleware(
    CORSMiddleware,
    allow_origins=settings.BACKEND_CORS_ORIGINS,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Tüm API route'larını kaydet
app.include_router(api_router, prefix=settings.API_V1_STR)

# Statik dosya sunumu (yüklenen avatarlar vb.)
if os.path.exists(settings.UPLOAD_DIR):
    app.mount("/uploads", StaticFiles(directory=settings.UPLOAD_DIR), name="uploads")


@app.get("/health")
def health_check():
    """Servis sağlık kontrolü."""
    return {
        "status": "healthy",
        "app": settings.APP_NAME,
        "version": "1.0.0",
        "env": settings.APP_ENV,
    }


@app.get("/")
def root():
    return {"message": f"🐯 {settings.APP_NAME} API — /docs adresinden dökümantasyona ulaşabilirsiniz."}
