"""
Strategy Infrastructure — Vision Repository Implementation.
"""

from typing import List, Optional
from uuid import UUID

from ...domain.entities.vision import Vision
from ...domain.repositories.interfaces import VisionRepository
from ..persistence.models import VisionModel
from .mappers import VisionMapper


class DjangoVisionRepository(VisionRepository):
    """پیاده‌سازی Django ریپازیتوری چشم‌انداز."""

    def find_by_id(self, vision_id: UUID) -> Optional[Vision]:
        try:
            model = VisionModel.objects.get(id=vision_id)
            return VisionMapper.to_entity(model)
        except VisionModel.DoesNotExist:
            return None

    def find_by_tenant(self, tenant_id: UUID) -> List[Vision]:
        qs = VisionModel.objects.filter(tenant_id=tenant_id)
        return [VisionMapper.to_entity(m) for m in qs]

    def find_active_by_tenant(self, tenant_id: UUID) -> List[Vision]:
        qs = VisionModel.objects.filter(
            tenant_id=tenant_id,
            status=VisionModel.Status.ACTIVE,
        )
        return [VisionMapper.to_entity(m) for m in qs]

    def save(self, entity: Vision) -> Vision:
        try:
            model = VisionModel.objects.get(id=entity.id)
            model = VisionMapper.to_model(entity, model)
        except VisionModel.DoesNotExist:
            model = VisionMapper.to_model(entity)
        model.save()
        return VisionMapper.to_entity(model)

    def delete(self, vision_id: UUID) -> bool:
        deleted, _ = VisionModel.objects.filter(id=vision_id).delete()
        return deleted > 0
