"""File upload router."""

from fastapi import APIRouter, Depends, HTTPException, UploadFile, status
from sqlalchemy.orm import Session

from app.database import get_db
from app.models.user import User
from app.services.auth_service import get_current_user
from app.services.upload_service import save_upload

router = APIRouter()


@router.post("/image", summary="上传单张图片")
async def upload_image(
    file: UploadFile,
    db: Session = Depends(get_db),
    _: User = Depends(get_current_user),
):
    """Upload a single image. Validates 2:1 aspect ratio and generates thumbnail.

    Returns:
        ``{"image_url": "...", "thumbnail_url": "..."}``
    """
    try:
        result = await save_upload(file, upload_dir="uploads/images")
        return result
    except ValueError as e:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail=str(e),
        )


@router.post("/batch", summary="批量上传图片")
async def batch_upload(
    files: list[UploadFile],
    db: Session = Depends(get_db),
    _: User = Depends(get_current_user),
):
    """Upload multiple images at once.

    Returns:
        ``{"items": [{"image_url": "...", "thumbnail_url": "..."}, ...]}``
    """
    if not files:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="未选择任何文件",
        )

    if len(files) > 20:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="单次上传最多 20 个文件",
        )

    results = []
    errors = []

    for file in files:
        try:
            result = await save_upload(file, upload_dir="uploads/images")
            results.append(result)
        except ValueError as e:
            errors.append({"filename": file.filename, "error": str(e)})

    return {
        "items": results,
        "errors": errors,
        "success_count": len(results),
        "error_count": len(errors),
    }
