"""Workspaces domain - facade exposed for other domains."""
from __future__ import annotations
from typing import Optional
from uuid import UUID

from src.domain.workspaces.repository import MembershipRepository, WorkspaceRepository


class WorkspaceSummary:
    """Minimal workspace info for other domains."""

    def __init__(self, id: UUID, slug: str, name: str, owner_id: Optional[UUID]):
        self.id = id
        self.slug = slug
        self.name = name
        self.owner_id = owner_id


class WorkspaceFacadeImpl:
    """Workspaces domain exposes workspace/membership info for other domains."""

    def __init__(
        self,
        workspace_repo: WorkspaceRepository,
        membership_repo: MembershipRepository,
    ):
        self._workspace_repo = workspace_repo
        self._membership_repo = membership_repo

    async def get_workspace_summary(self, workspace_id: UUID) -> Optional[WorkspaceSummary]:
        ws = await self._workspace_repo.get_by_id(workspace_id)
        if not ws:
            return None
        return WorkspaceSummary(
            id=ws.id,
            slug=ws.slug,
            name=ws.name,
            owner_id=ws.owner_id,
        )

    async def list_workspace_summaries_for_user(self, user_id: UUID) -> list[WorkspaceSummary]:
        return [
            WorkspaceSummary(id=ws.id, slug=ws.slug, name=ws.name, owner_id=ws.owner_id)
            for ws in await self._workspace_repo.list_for_user(user_id)
        ]

    async def check_permission(self, workspace_id: UUID, user_id: UUID, permission: str) -> bool:
        return await self._membership_repo.has_permission(workspace_id, user_id, permission)
