"""Strategy Infrastructure — GateDeliverable Repository."""

from typing import List, Optional
from uuid import UUID

from ..persistence.models import GateDeliverableModel
from .mappers import GateDeliverableMapper
from ...domain.entities.gate_deliverable import GateDeliverable


class DjangoGateDeliverableRepository:
    """پیاده‌سازی Django ریپازیتوری تحویل‌دادنی دروازه."""

    def find_by_id(self, deliverable_id: UUID) -> Optional[GateDeliverable]:
        try:
            model = GateDeliverableModel.objects.get(pk=deliverable_id)
            return GateDeliverableMapper.to_entity(model)
        except GateDeliverableModel.DoesNotExist:
            return None

    def find_by_review(self, review_id: UUID) -> List[GateDeliverable]:
        qs = GateDeliverableModel.objects.filter(review_id=review_id)
        return [GateDeliverableMapper.to_entity(m) for m in qs]

    def save(self, entity: GateDeliverable) -> GateDeliverable:
        try:
            model = GateDeliverableModel.objects.get(pk=entity.id)
            model = GateDeliverableMapper.to_model(entity, model)
        except GateDeliverableModel.DoesNotExist:
            model = GateDeliverableMapper.to_model(entity)
        model.save()
        return GateDeliverableMapper.to_entity(model)

    def delete(self, deliverable_id: UUID) -> bool:
        deleted, _ = GateDeliverableModel.objects.filter(pk=deliverable_id).delete()
        return deleted > 0
