"""Strategy Infrastructure — Gate Repository."""

from typing import List, Optional
from uuid import UUID

from ..persistence.models import GateModel
from .mappers import GateMapper
from ...domain.entities.gate import Gate


class DjangoGateRepository:
    """پیاده‌سازی Django ریپازیتوری دروازه."""

    def find_by_id(self, gate_id: UUID) -> Optional[Gate]:
        try:
            model = GateModel.objects.get(pk=gate_id)
            return GateMapper.to_entity(model)
        except GateModel.DoesNotExist:
            return None

    def find_by_process(self, process_id: UUID) -> List[Gate]:
        qs = GateModel.objects.filter(process_id=process_id).order_by("sequence")
        return [GateMapper.to_entity(m) for m in qs]

    def save(self, entity: Gate) -> Gate:
        try:
            model = GateModel.objects.get(pk=entity.id)
            model = GateMapper.to_model(entity, model)
        except GateModel.DoesNotExist:
            model = GateMapper.to_model(entity)
        model.save()
        return GateMapper.to_entity(model)

    def delete(self, gate_id: UUID) -> bool:
        deleted, _ = GateModel.objects.filter(pk=gate_id).delete()
        return deleted > 0
