"""Strategy Infrastructure — GateReview Repository."""

from typing import List, Optional
from uuid import UUID

from ..persistence.models import GateReviewModel
from .mappers import GateReviewMapper
from ...domain.entities.gate_review import GateReview


class DjangoGateReviewRepository:
    """پیاده‌سازی Django ریپازیتوری بازبینی دروازه."""

    def find_by_id(self, review_id: UUID) -> Optional[GateReview]:
        try:
            model = GateReviewModel.objects.get(pk=review_id)
            return GateReviewMapper.to_entity(model)
        except GateReviewModel.DoesNotExist:
            return None

    def find_by_gate(self, gate_id: UUID) -> List[GateReview]:
        qs = GateReviewModel.objects.filter(gate_id=gate_id)
        return [GateReviewMapper.to_entity(m) for m in qs]

    def find_by_entity(self, entity_id: UUID, entity_type: str) -> List[GateReview]:
        qs = GateReviewModel.objects.filter(entity_id=entity_id, entity_type=entity_type)
        return [GateReviewMapper.to_entity(m) for m in qs]

    def save(self, entity: GateReview) -> GateReview:
        try:
            model = GateReviewModel.objects.get(pk=entity.id)
            model = GateReviewMapper.to_model(entity, model)
        except GateReviewModel.DoesNotExist:
            model = GateReviewMapper.to_model(entity)
        model.save()
        return GateReviewMapper.to_entity(model)

    def delete(self, review_id: UUID) -> bool:
        deleted, _ = GateReviewModel.objects.filter(pk=review_id).delete()
        return deleted > 0
