"""PPM Infrastructure — Benefit Plan Repository Implementation."""
from uuid import UUID

from ..persistence.models import BenefitPlanModel
from .mappers import BenefitPlanMapper
from ...domain.repositories.interfaces import BenefitPlanRepository


class DjangoBenefitPlanRepository(BenefitPlanRepository):

    def save(self, entity):
        model = BenefitPlanMapper.to_model(entity)
        model.tenant_id = entity.tenant_id
        model.save()
        return BenefitPlanMapper.to_entity(model)

    def get_by_id(self, id: UUID):
        try:
            model = BenefitPlanModel.objects.get(pk=id)
            return BenefitPlanMapper.to_entity(model)
        except BenefitPlanModel.DoesNotExist:
            return None

    def find(self, **filters) -> list:
        qs = BenefitPlanModel.objects.filter(**filters)
        return [BenefitPlanMapper.to_entity(m) for m in qs]

    def delete(self, id: UUID) -> None:
        BenefitPlanModel.objects.filter(pk=id).delete()

    def find_by_program(self, program_id: UUID) -> list:
        qs = BenefitPlanModel.objects.filter(program_id=program_id)
        return [BenefitPlanMapper.to_entity(m) for m in qs]

    def find_by_portfolio(self, portfolio_id: UUID) -> list:
        qs = BenefitPlanModel.objects.filter(portfolio_id=portfolio_id)
        return [BenefitPlanMapper.to_entity(m) for m in qs]
