
from datetime import datetime

from management.models.associazione_pratiche_a_modello import PraticheModello
from management.models.modello import Modello
from management.repositories.base import BaseRepository
from django.db import transaction

from management.serializers.modello_serializer import ModelloSerializer


class ModelloRepository(BaseRepository):
    entity=Modello

    @transaction.atomic
    def save(self, dto, pratiche_data=None) -> tuple:
        modello_id = dto.get("id")
        if modello_id:
            try:
                vd = pratiche_data.get('valido_dal')
                va = pratiche_data.get('valido_al')
                PraticheModello.objects.filter(modello=modello_id).update(valido_dal=vd, valido_al=va)
                m_id = dto.get('id')
                instance = Modello.objects.get(id=m_id)
            except Modello.DoesNotExist:
                return False, {"detail": "Modello not found"}
            serializer = ModelloSerializer(instance, data=dto, partial=True)
        else:
            serializer = ModelloSerializer(data=dto)
        serializer.is_valid(raise_exception=True)
        modello = serializer.save()
         
        if pratiche_data and not modello_id:
            pratiche_ids = pratiche_data.get('ids', [])
            valido_dal = pratiche_data.get('valido_dal')
            valido_al = pratiche_data.get('valido_al')

            oggetti_da_creare = []
            for p_id in pratiche_ids:
                oggetti_da_creare.append(PraticheModello(
                    modello=modello,
                    pratica_id=p_id,
                    valido_dal=valido_dal,
                    valido_al=valido_al
                ))
            
            if oggetti_da_creare:
                PraticheModello.objects.bulk_create(oggetti_da_creare)

        return True, {"id": modello.id}
class PraticheModelloRepository(BaseRepository):
    entity=PraticheModello

    # @transaction.atomic
    # def save(self, dto) -> tuple:
    #     serializer = PraticheModelloSerializer(data=dto)

    #     serializer.is_valid(raise_exception=True)
    #     modello = serializer.save()

    #     return True, {"id": modello.id}
