"""
Strategy Infrastructure — Scorecard Perspective Repository (Django ORM).
"""

from typing import List, Optional
from uuid import UUID

from ...domain.entities.scorecard_perspective import ScorecardPerspective
from ...domain.repositories.interfaces import ScorecardPerspectiveRepository
from ..persistence.models import ScorecardPerspectiveModel
from .mappers import ScorecardPerspectiveMapper


class DjangoScorecardPerspectiveRepository(ScorecardPerspectiveRepository):

    def find_by_id(self, perspective_id: UUID) -> Optional[ScorecardPerspective]:
        try:
            model = ScorecardPerspectiveModel.objects.get(id=perspective_id)
            return ScorecardPerspectiveMapper.to_entity(model)
        except ScorecardPerspectiveModel.DoesNotExist:
            return None

    def find_by_scorecard(self, scorecard_id: UUID) -> List[ScorecardPerspective]:
        qs = ScorecardPerspectiveModel.objects.filter(scorecard_id=scorecard_id)
        return [ScorecardPerspectiveMapper.to_entity(m) for m in qs]

    def save(self, entity: ScorecardPerspective) -> ScorecardPerspective:
        try:
            model = ScorecardPerspectiveModel.objects.get(id=entity.id)
            model = ScorecardPerspectiveMapper.to_model(entity, model)
        except ScorecardPerspectiveModel.DoesNotExist:
            model = ScorecardPerspectiveMapper.to_model(entity)
        model.save()
        return ScorecardPerspectiveMapper.to_entity(model)

    def delete(self, perspective_id: UUID) -> bool:
        deleted, _ = ScorecardPerspectiveModel.objects.filter(id=perspective_id).delete()
        return deleted > 0
