from datetime import datetime, date, time

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

from api.models import TtStudentSet
from api.utils import bulk_sync_to_redis
from backend.kafka import send_request
from backend.redis_client import redis_client

class Command(BaseCommand):
    def handle(self, *args, **options):
        student_sets = (
            TtStudentSet.objects
            .filter(department_id__isnull=True, pos_id__isnull=False)
            .select_related("pos")
        )
        method = "student_set_update"
        kafka_topic = "microservices-tt"
        kafka_data = []
        count = 0
        redis_data={
            "update":{},
        }
        redis_table = "student_set"
        for val in student_sets:
            department_id = val.pos.department_id
            data = {
                "id": val.id,
                "department_id": department_id,
            }
            val.department_id = department_id
            redis_data["update"].setdefault(redis_table, []).append(data)
            kafka_data.append(data)
            count += 1
        kafka_request_data = {
            "session_id": "",
            "student_set": kafka_data,
        }
        print("started update db")
        TtStudentSet.objects.bulk_update(student_sets, ["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("Student set:"+str(count))