"""PPM Infrastructure — Benefit Repository Implementation."""
from uuid import UUID

from ..persistence.models import BenefitModel
from .mappers import BenefitMapper
from ...domain.repositories.interfaces import BenefitRepository


class DjangoBenefitRepository(BenefitRepository):

    def save(self, entity):
        model = BenefitMapper.to_model(entity)
        model.tenant_id = entity.tenant_id
        model.save()
        return BenefitMapper.to_entity(model)

    def get_by_id(self, id: UUID):
        try:
            model = BenefitModel.objects.get(pk=id)
            return BenefitMapper.to_entity(model)
        except BenefitModel.DoesNotExist:
            return None

    def find(self, **filters) -> list:
        qs = BenefitModel.objects.filter(**filters)
        return [BenefitMapper.to_entity(m) for m in qs]

    def delete(self, id: UUID) -> None:
        BenefitModel.objects.filter(pk=id).delete()

    def find_by_plan(self, benefit_plan_id: UUID) -> list:
        qs = BenefitModel.objects.filter(benefit_plan_id=benefit_plan_id)
        return [BenefitMapper.to_entity(m) for m in qs]

    def find_by_status(self, status: str) -> list:
        qs = BenefitModel.objects.filter(status=status)
        return [BenefitMapper.to_entity(m) for m in qs]
