"""Main FastAPI application"""
from fastapi import FastAPI, Depends, HTTPException, Header, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from sqlalchemy.orm import Session
import logging

from app.core.config import settings
from app.core.db.database import get_db
from app.api import matches, predictions, models, runs, admin
from app.web import routes as web_routes

# Configure logging
logging.basicConfig(
    level=getattr(logging, settings.log_level),
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)

app = FastAPI(
    title="Sports Predictor",
    description="ML-based sports match prediction system",
    version="0.1.0"
)

# Mount static files
app.mount("/static", StaticFiles(directory="app/web/static"), name="static")

# Templates
templates = Jinja2Templates(directory="app/web/templates")

# Include routers
app.include_router(matches.router, prefix="/api", tags=["matches"])
app.include_router(predictions.router, prefix="/api", tags=["predictions"])
app.include_router(models.router, prefix="/api", tags=["models"])
app.include_router(runs.router, prefix="/api", tags=["runs"])
app.include_router(admin.router, prefix="/api/admin", tags=["admin"])

# Include web routes
app.include_router(web_routes.router, tags=["web"])


@app.get("/health")
async def health():
    """Health check endpoint"""
    return {"status": "ok"}


@app.get("/")
async def root():
    """Root endpoint redirects to web interface"""
    from fastapi.responses import RedirectResponse
    return RedirectResponse(url="/web/")


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host=settings.api_host, port=settings.api_port)

