from fastapi import APIRouter, Depends, HTTPException

from app.dependencies.trusted_context import get_trusted_context
from app.middleware.trusted_context import TrustedContext
from app.models.search import RetrievalSearchRequest, RetrievalSearchResponse
from app.services.retrieval_service import retrieval_service

router = APIRouter(prefix="/retrieval", tags=["Retrieval"])


@router.post(
    "/search",
    response_model=RetrievalSearchResponse,
    summary="Semantic search for Lucos agent chunk refs (TW-201)",
)
async def search(
    body: RetrievalSearchRequest,
    ctx: TrustedContext = Depends(get_trusted_context),
) -> RetrievalSearchResponse:
    allowed = ctx.filter_repo_ids(body.repo_ids)
    if len(allowed) != len(body.repo_ids):
        raise HTTPException(status_code=403, detail="Repository access denied")

    return await retrieval_service.search(body, ctx)
