"""Strategy Infrastructure — GateProcess Repository."""

from typing import List, Optional
from uuid import UUID

from ..persistence.models import GateProcessModel
from .mappers import GateProcessMapper
from ...domain.entities.gate_process import GateProcess


class DjangoGateProcessRepository:
    """پیاده‌سازی Django ریپازیتوری فرآیند Stage-Gate."""

    def find_by_id(self, process_id: UUID) -> Optional[GateProcess]:
        try:
            model = GateProcessModel.objects.get(pk=process_id)
            return GateProcessMapper.to_entity(model)
        except GateProcessModel.DoesNotExist:
            return None

    def find_all(self, tenant_id: UUID) -> List[GateProcess]:
        qs = GateProcessModel.objects.filter(tenant_id=tenant_id)
        return [GateProcessMapper.to_entity(m) for m in qs]

    def save(self, entity: GateProcess) -> GateProcess:
        try:
            model = GateProcessModel.objects.get(pk=entity.id)
            model = GateProcessMapper.to_model(entity, model)
        except GateProcessModel.DoesNotExist:
            model = GateProcessMapper.to_model(entity)
        model.save()
        return GateProcessMapper.to_entity(model)

    def delete(self, process_id: UUID) -> bool:
        deleted, _ = GateProcessModel.objects.filter(pk=process_id).delete()
        return deleted > 0
