from fastapi import APIRouter, Request, UploadFile, File, Depends, status, HTTPException
from typing import List
import os
import uuid
import shutil
from pathlib import Path

upload_router = APIRouter()

is_vercel = os.environ.get("VERCEL") == "1"
UPLOAD_DIR = Path("/tmp/uploads") if is_vercel else Path("uploads")
UPLOAD_DIR.mkdir(exist_ok=True, parents=True)

# Helper function to get base URL
def get_base_url(request: Request):
    return str(request.base_url).rstrip('/')

@upload_router.post("", status_code=status.HTTP_201_CREATED)
async def upload_files(request: Request, files: List[UploadFile] = File(...)):
    uploaded_urls = []
    
    for file in files:
        if not file.filename:
            continue
            
        # Generate a unique filename to prevent overwrites
        file_extension = os.path.splitext(file.filename)[1]
        unique_filename = f"{uuid.uuid4().hex}{file_extension}"
        file_path = UPLOAD_DIR / unique_filename
        
        try:
            with open(file_path, "wb") as buffer:
                shutil.copyfileobj(file.file, buffer)
        except Exception as e:
            raise HTTPException(
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                detail=f"Could not save file {file.filename}: {str(e)}"
            )
        finally:
            file.file.close()
            
        # Construct the URL
        base_url = get_base_url(request)
        # Handle cases where reverse proxy might alter scheme
        file_url = f"{base_url}/uploads/{unique_filename}"
        uploaded_urls.append(file_url)
        
    return {"urls": uploaded_urls}
