"""Audio streaming endpoint — direct stream with Range support."""

import uuid
from typing import Annotated

from fastapi import APIRouter, Header
from fastapi.responses import StreamingResponse

from app.api.deps import StreamingServiceDep, StreamUser

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


@router.get("/{track_id}")
async def stream_track(
    track_id: uuid.UUID,
    service: StreamingServiceDep,
    _user: StreamUser,
    range_header: Annotated[str | None, Header(alias="Range")] = None,
) -> StreamingResponse:
    result = await service.open_stream(track_id, range_header)

    headers = {
        "Accept-Ranges": "bytes",
        "Content-Length": str(result.content_length),
    }

    if result.is_partial:
        headers["Content-Range"] = f"bytes {result.start}-{result.end}/{result.total_size}"
        status_code = 206
    else:
        status_code = 200

    return StreamingResponse(
        result.stream,
        status_code=status_code,
        headers=headers,
        media_type=result.content_type,
    )
