"""Authenticated media delivery. Never a static mount - see services/media.py."""

from __future__ import annotations

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

from app.db import get_db
from app.models.tables import TicketMedia
from app.services import media as media_service
from app.services.identity import CurrentActor, resolve_actor

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


@router.get("/{media_id}")
def get_media(
    media_id: int,
    db: Session = Depends(get_db),
    actor: CurrentActor = Depends(resolve_actor),
) -> FileResponse:
    record = db.get(TicketMedia, media_id)
    if record is None:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail={
                "error_code": "MEDIA_NOT_FOUND",
                "summary": "No attachment with that id.",
                "details": None,
            },
        )

    try:
        path = media_service.absolute_path(record.rel_path)
    except media_service.MediaError as exc:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail={
                "error_code": exc.error_code,
                "summary": exc.summary,
                "details": exc.details,
            },
        ) from None

    if not path.is_file():
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail={
                "error_code": "MEDIA_FILE_MISSING",
                "summary": "The attachment record exists but its file does not.",
                "details": None,
            },
        )

    return FileResponse(path, media_type=record.mime)
