"""
Strategy Infrastructure — Key Result CheckIn Repository Implementation.
"""

from typing import List, Optional
from uuid import UUID

from ...domain.entities.key_result_checkin import KeyResultCheckIn
from ...domain.repositories.interfaces import KeyResultCheckInRepository
from ..persistence.models import KeyResultCheckInModel
from .mappers import KeyResultCheckInMapper


class DjangoKeyResultCheckInRepository(KeyResultCheckInRepository):
    """پیاده‌سازی Django ریپازیتوری ثبت پیشرفت."""

    def find_by_id(self, check_in_id: UUID) -> Optional[KeyResultCheckIn]:
        try:
            model = KeyResultCheckInModel.objects.get(id=check_in_id)
            return KeyResultCheckInMapper.to_entity(model)
        except KeyResultCheckInModel.DoesNotExist:
            return None

    def find_by_key_result(self, key_result_id: UUID) -> List[KeyResultCheckIn]:
        qs = KeyResultCheckInModel.objects.filter(key_result_id=key_result_id)
        return [KeyResultCheckInMapper.to_entity(m) for m in qs]

    def save(self, entity: KeyResultCheckIn) -> KeyResultCheckIn:
        try:
            model = KeyResultCheckInModel.objects.get(id=entity.id)
            model = KeyResultCheckInMapper.to_model(entity, model)
        except KeyResultCheckInModel.DoesNotExist:
            model = KeyResultCheckInMapper.to_model(entity)
        model.save()
        return KeyResultCheckInMapper.to_entity(model)

    def delete(self, check_in_id: UUID) -> bool:
        deleted, _ = KeyResultCheckInModel.objects.filter(id=check_in_id).delete()
        return deleted > 0
