from fastapi import APIRouter, Depends, HTTPException, Query

from app.dependencies.trusted_context import get_trusted_context
from app.middleware.trusted_context import TrustedContext
from app.models.status import IndexingStatusResponse
from app.services.upload_service import upload_service

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


@router.get(
    "/status",
    response_model=IndexingStatusResponse,
    summary="Workspace indexing status (TW-203)",
)
async def get_indexing_status(
    repo_id: str = Query(min_length=1),
    ctx: TrustedContext = Depends(get_trusted_context),
) -> IndexingStatusResponse:
    if not ctx.can_access_repo(repo_id):
        raise HTTPException(status_code=403, detail="Repository access denied")

    return await upload_service.get_indexing_status(repo_id, ctx)
