"""PPM Infrastructure — Benefit Measurement Repository Implementation."""
from uuid import UUID

from ..persistence.models import BenefitMeasurementModel
from .mappers import BenefitMeasurementMapper
from ...domain.repositories.interfaces import BenefitMeasurementRepository


class DjangoBenefitMeasurementRepository(BenefitMeasurementRepository):

    def save(self, entity):
        model = BenefitMeasurementMapper.to_model(entity)
        model.tenant_id = entity.tenant_id
        model.save()
        return BenefitMeasurementMapper.to_entity(model)

    def get_by_id(self, id: UUID):
        try:
            model = BenefitMeasurementModel.objects.get(pk=id)
            return BenefitMeasurementMapper.to_entity(model)
        except BenefitMeasurementModel.DoesNotExist:
            return None

    def find(self, **filters) -> list:
        qs = BenefitMeasurementModel.objects.filter(**filters)
        return [BenefitMeasurementMapper.to_entity(m) for m in qs]

    def delete(self, id: UUID) -> None:
        BenefitMeasurementModel.objects.filter(pk=id).delete()

    def find_by_benefit(self, benefit_id: UUID) -> list:
        qs = BenefitMeasurementModel.objects.filter(benefit_id=benefit_id).order_by("-measurement_date")
        return [BenefitMeasurementMapper.to_entity(m) for m in qs]
