from datetime import datetime, date, time

from django.core.management.base import BaseCommand
from django.db import transaction
from django.forms import model_to_dict

from api.models import TtActivity
from api.utils import bulk_sync_to_redis
from backend.kafka import send_request
from backend.redis_client import redis_client
from api.services.integration.tracking import mutation_tracking, track_activity_ids

class Command(BaseCommand):
    def handle(self, *args, **options):
        activities = (
            TtActivity.objects
            .filter(is_booking=0, department_id__isnull=True, activity_template_id__isnull=False)
            .select_related("activity_template")
        )
        method = "activity_update"
        kafka_topic = "microservices-tt"
        kafka_activity = []
        activity_count = 0
        redis_data={
            "update":{},
        }
        redis_table = "activity"
        for val in activities:
            department_id = val.activity_template.department_id
            data = {
                "id": val.id,
                "department_id": department_id,
            }
            val.department_id = department_id
            redis_data["update"].setdefault(redis_table, []).append(data)
            kafka_activity.append(data)
            activity_count += 1
        kafka_request_data = {
            "session_id": "",
            "activity": kafka_activity,
        }
        print("started update db")
        with transaction.atomic():
            with mutation_tracking(origin="management_command"):
                track_activity_ids(activity.id for activity in activities)
                TtActivity.objects.bulk_update(activities, ["department_id"])
                print("started update redis")
                bulk_sync_to_redis(redis_client, redis_data)
                print("started update kafka")
                send_request(kafka_topic, kafka_request_data, None, method)
        print("Activity:"+str(activity_count))
