"""Generic file upload endpoints (ImageKit-backed)."""

from typing import List

from fastapi import APIRouter, File, Form, HTTPException, UploadFile, status

from app.schemas.common import SuccessResponse
from app.api.v1.documents import upload_to_imagekit

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


@router.post("/public", response_model=SuccessResponse, status_code=status.HTTP_201_CREATED)
async def upload_public_files(
    files: List[UploadFile] = File(...),
    folder: str = Form("public"),
):
    """
    Public endpoint to upload one or multiple files to ImageKit.
    Returns a list of {file_name, url} objects.
    """
    if not files:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="No files provided for upload",
        )

    results = []
    for f in files:
        content = await f.read()
        if not content:
            continue
        try:
            url = await upload_to_imagekit(
                file_content=content,
                file_name=f.filename or "upload",
                folder=folder,
            )
        except Exception as e:
            raise HTTPException(
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                detail=f"Failed to upload file '{f.filename}': {e}",
            )
        results.append(
            {
                "file_name": f.filename,
                "url": url,
            }
        )

    return SuccessResponse(
        data={"files": results},
        message="Files uploaded successfully",
    )

