from celery import shared_task
from utils.celery.celery_base_task import *
from django.conf import settings
from archives.models import Archives
import logging, json
from django.core import serializers

LOGGER = logging.getLogger(__name__)


@shared_task
def archive_or_unarchive_affected_objects_under_archived_main_object(
    affected_objects_dict, action="archive"
):
    main_object_name = affected_objects_dict.get("main_model_name")
    main_object_id = affected_objects_dict.get("main_model_object_id")
    affected_model = affected_objects_dict.get("affected_model")
    affected_objects_id = affected_objects_dict.get("affected_objects_id")

    if action == "archive":
        objects_to_archive = []

        LOGGER.info(
            f"Archiving affected objects under {main_object_name} {main_object_id}"
        )

        for obj_id in affected_objects_id:
            objects_to_archive.append(
                Archives(model=affected_model, model_object_id=obj_id)
            )

        Archives.objects.bulk_create(objects_to_archive)
        LOGGER.info(
            f"Affected {len(affected_objects_id)} objects under {main_object_name} {main_object_id} archived successfully."
        )
    else:
        LOGGER.info(
            f"Unarchiving affected objects under {main_object_name} {main_object_id}"
        )

        Archives.objects.filter(
            model__iexact=affected_model, model_object_id__in=affected_objects_id
        ).delete()

        LOGGER.info(
            f"Affected {len(affected_objects_id)} objects under {main_object_name} {main_object_id} unarchived successfully."
        )
