"""General image scan API."""

from fastapi import APIRouter, Depends, File, UploadFile

from src.dispatchers.i_document_workflow_dispatcher import (
    DocumentWorkflowDispatcherInterface,
)
from src.models.api.image_scan import ImageScanResponse
from src.routers.dependencies import dispatcher
from src.routers.error_mapping import run_http

router = APIRouter(prefix="/image-scan", tags=["image-scan"])


@router.post(
    "/extract",
    response_model=ImageScanResponse,
    summary="Identify and extract everything visible in one or more camera images",
)
async def image_scan_extract(
    images: list[UploadFile] = File(
        ...,
        description="One or more images (JPEG, PNG or WEBP). Repeat the field for several.",
    ),
    workflow_dispatcher: DocumentWorkflowDispatcherInterface = Depends(dispatcher),
) -> ImageScanResponse:
    return await run_http(
        workflow_dispatcher.image_scan(images),
        failure_detail="Image scan failed",
    )
