from fastapi import FastAPI, File, UploadFile, Request
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from PIL import Image
import os
import uuid
import logging
import shutil

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

app = FastAPI()

# Mount static files
app.mount("/static", StaticFiles(directory="static"), name="static")

# Set up templates
templates = Jinja2Templates(directory="templates")

# Set upload folder
UPLOAD_FOLDER = "static/uploads"
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

@app.get("/")
async def index(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.post("/upload")
async def upload_file(request: Request, file: UploadFile = File(...)):
    try:
        # Save uploaded file
        filename = f"{uuid.uuid4()}{os.path.splitext(file.filename)[1]}"
        filepath = os.path.join(UPLOAD_FOLDER, filename)
        
        # Write file content
        with open(filepath, "wb") as f:
            shutil.copyfileobj(file.file, f)
        logger.info(f"File saved: {filename}")

        # Verify and resize image
        image = Image.open(filepath).convert("RGB")
        image = image.resize((800, 600))  # Resize for consistent display
        image.save(filepath)
        logger.info(f"Image resized and saved: {filename}")

        return templates.TemplateResponse(
            "results.html",
            {"request": request, "image": f"/static/uploads/{filename}"}
        )
    
    except Exception as e:
        logger.error(f"Error processing file: {str(e)}")
        return templates.TemplateResponse(
            "index.html",
            {"request": request, "error": f"Error processing file: {str(e)}"}
        )