from fastapi import FastAPI, HTTPException
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
from src.api.v1.routes import api_router as v1_router
from src.core.middleware import custom_middleware
from src.core.config import settings
from sqlalchemy.orm import Session
from sqlalchemy import text
from src.database.session import get_db
import logging
import os

app = FastAPI(title=settings.APP_NAME, debug=settings.DEBUG)

# Apply custom middleware
app = custom_middleware(app)

# Mount static files for uploaded documents
upload_dir = "uploads"
if not os.path.exists(upload_dir):
    os.makedirs(upload_dir)
app.mount("/uploads", StaticFiles(directory=upload_dir), name="uploads")

# Include v1 router
app.include_router(v1_router, prefix="/api/v1")

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


@app.get("/")
def read_root():
    return {"message": f"Welcome to {settings.APP_NAME}"}


@app.get("/debug/uploads")
def debug_uploads():
    """Debug endpoint to check uploads directory"""
    import os
    
    upload_dir = "uploads"
    abs_path = os.path.abspath(upload_dir)
    
    return {
        "upload_dir": upload_dir,
        "absolute_path": abs_path,
        "exists": os.path.exists(upload_dir),
        "is_directory": os.path.isdir(upload_dir) if os.path.exists(upload_dir) else False,
        "files": os.listdir(upload_dir) if os.path.exists(upload_dir) else [],
        "current_working_directory": os.getcwd()
    }


@app.get("/api/pusher-config")
def get_pusher_config():
    """Return Pusher configuration for frontend"""
    return {
        "key": settings.PUSHER_KEY,
        "cluster": settings.PUSHER_CLUSTER
    }


@app.get("/test", response_class=HTMLResponse)
def test_page():
    """Serve test HTML page"""
    try:
        with open("test_upload.html", "r") as f:
            return f.read()
    except FileNotFoundError:
        return "<h1>Test page not found</h1><p>test_upload.html file is missing</p>"


@app.on_event("startup")
def startup_event():
    db: Session = next(get_db())


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)
