"""Revisions domain - facade exposed for codegen, previews, deployments."""
from __future__ import annotations
from uuid import UUID

from src.domain.revisions.repository import RevisionRepository
from src.domain.revisions.schemas import RevisionSummary


class RevisionFacadeImpl:
    def __init__(self, revision_repo: RevisionRepository):
        self._repo = revision_repo

    async def get_latest_revision(self, project_id: UUID) -> Optional[RevisionSummary]:
        rev = await self._repo.get_latest(project_id)
        if not rev:
            return None
        return RevisionSummary(id=rev.id, number=rev.revision_number, git_sha=rev.git_sha)

    async def create_revision(
        self,
        project_id: UUID,
        git_sha: str,
        source: str,
        source_id: Optional[UUID] = None,
        commit_message: Optional[str] = None,
        created_by: Optional[UUID] = None,
    ) -> UUID:
        rev = await self._repo.create(
            project_id=project_id,
            git_sha=git_sha,
            source=source,
            source_id=source_id,
            commit_message=commit_message,
            created_by=created_by,
        )
        return rev.id

    async def get_revision_git_sha(self, revision_id: UUID) -> Optional[str]:
        rev = await self._repo.get_by_id(revision_id)
        return rev.git_sha if rev else None
