from fastapi import APIRouter
from fastapi.responses import JSONResponse
from sqlalchemy import text
from ..database import engine
from ..redis_client import redis_client
import os

router = APIRouter(prefix="/api/health", tags=["health"])


@router.get("")
async def health_check():
    db_healthy = False
    redis_healthy = False
    
    # Check database
    try:
        with engine.connect() as conn:
            conn.execute(text("SELECT 1"))
        db_status = "ok"
        db_healthy = True
    except Exception as e:
        db_status = "error"
    
    # Check redis
    try:
        redis_client.ping()
        redis_status = "ok"
        redis_healthy = True
    except Exception as e:
        redis_status = "error"
    
    overall_healthy = db_healthy and redis_healthy
    
    response_data = {
        "status": "healthy" if overall_healthy else "unhealthy",
        "database": db_status,
        "redis": redis_status,
        "version": os.getenv("APP_VERSION", "0.0.0.0")
    }
    
    if not overall_healthy:
        return JSONResponse(
            status_code=503,
            content=response_data
        )
    
    return response_data
