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