from __future__ import annotations


class RetrievalServiceError(Exception):
    """Base error for internal retrieve failures."""

    def __init__(self, code: str, message: str, *, status_code: int) -> None:
        super().__init__(message)
        self.code = code
        self.message = message
        self.status_code = status_code


class InvalidRetrieveRequestError(RetrievalServiceError):
    def __init__(self, message: str) -> None:
        super().__init__("invalid_request", message, status_code=400)


class SnapshotNotFoundError(RetrievalServiceError):
    def __init__(self, repo_id: str, snapshot_id: str) -> None:
        super().__init__(
            "snapshot_not_found",
            f"No embedded vectors for repo_id={repo_id} snapshot_id={snapshot_id}",
            status_code=404,
        )


class EmbeddingRetrievalError(RetrievalServiceError):
    def __init__(self, message: str) -> None:
        super().__init__("embedding_error", message, status_code=502)


class QdrantRetrievalError(RetrievalServiceError):
    def __init__(self, message: str) -> None:
        super().__init__("qdrant_error", message, status_code=502)


class MongoRetrievalError(RetrievalServiceError):
    def __init__(self, message: str) -> None:
        super().__init__("mongo_error", message, status_code=503)
