"""
PPM Infrastructure — BusinessCase Repository Implementation

پیاده‌سازی ریپازیتوری کیس تجاری با Django ORM.
"""

from typing import Optional, List
from uuid import UUID

from ...domain.entities.business_case import BusinessCase
from ...domain.repositories.interfaces import IBusinessCaseRepository
from ..persistence.models import BusinessCaseModel
from .mappers import BusinessCaseMapper


class DjangoBusinessCaseRepository(IBusinessCaseRepository):
    """پیاده‌سازی ریپازیتوری کیس تجاری."""

    def save(self, entity: BusinessCase) -> BusinessCase:
        try:
            model = BusinessCaseModel.objects.get(id=entity.id)
            model = BusinessCaseMapper.to_model(entity, model)
        except BusinessCaseModel.DoesNotExist:
            model = BusinessCaseMapper.to_model(entity)
        model.save()
        return BusinessCaseMapper.to_entity(model)

    def get_by_id(self, id: UUID) -> Optional[BusinessCase]:
        try:
            model = BusinessCaseModel.objects.get(id=id)
            return BusinessCaseMapper.to_entity(model)
        except BusinessCaseModel.DoesNotExist:
            return None

    def find(self, **filters) -> List[BusinessCase]:
        qs = BusinessCaseModel.objects.filter(**filters)
        return [BusinessCaseMapper.to_entity(m) for m in qs]

    def delete(self, id: UUID) -> None:
        BusinessCaseModel.objects.filter(id=id).delete()

    def find_by_program(self, program_id: UUID) -> List[BusinessCase]:
        return self.find(program_id=program_id)

    def find_by_status(self, status: str) -> List[BusinessCase]:
        return self.find(status=status)
