from __future__ import annotations

from pydantic import Field

from app.models.common import StrictModel


class RepoCandidate(StrictModel):
    repo_id: str
    label: str
    indexing_status: str | None = None
    latest_snapshot_id: str | None = None


class RepoClarificationResponse(StrictModel):
    status: str = "repo_clarification_required"
    message: str
    question: str
    candidates: list[RepoCandidate] = Field(default_factory=list)
    request_id: str


class RepoResolutionResult(StrictModel):
    repo_id: str | None = None
    clarification: RepoClarificationResponse | None = None

    @property
    def is_resolved(self) -> bool:
        return self.repo_id is not None and self.clarification is None


class RepoClarificationRequired(Exception):
    """Raised when repo_id cannot be resolved; maps to HTTP 409."""

    def __init__(self, clarification: RepoClarificationResponse):
        super().__init__(clarification.message)
        self.clarification = clarification
