"""
Strategy Infrastructure — Scorecard Repository (Django ORM).
"""

from typing import List, Optional
from uuid import UUID

from ...domain.entities.scorecard import Scorecard
from ...domain.repositories.interfaces import ScorecardRepository
from ..persistence.models import ScorecardModel
from .mappers import ScorecardMapper


class DjangoScorecardRepository(ScorecardRepository):

    def find_by_id(self, scorecard_id: UUID) -> Optional[Scorecard]:
        try:
            model = ScorecardModel.objects.get(id=scorecard_id)
            return ScorecardMapper.to_entity(model)
        except ScorecardModel.DoesNotExist:
            return None

    def find_by_tenant(self, tenant_id: UUID) -> List[Scorecard]:
        qs = ScorecardModel.objects.filter(tenant_id=tenant_id)
        return [ScorecardMapper.to_entity(m) for m in qs]

    def save(self, entity: Scorecard) -> Scorecard:
        try:
            model = ScorecardModel.objects.get(id=entity.id)
            model = ScorecardMapper.to_model(entity, model)
        except ScorecardModel.DoesNotExist:
            model = ScorecardMapper.to_model(entity)
        model.save()
        return ScorecardMapper.to_entity(model)

    def delete(self, scorecard_id: UUID) -> bool:
        deleted, _ = ScorecardModel.objects.filter(id=scorecard_id).delete()
        return deleted > 0
