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