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

from api.models import TtStaff, TtLocation, TtStudentSet, TtActivityTemplate, TtActivity, TtModule, TtAcademicTerm, \
    TtActivityTemplateWeek
from api.utils import convert_to_redis_week, bulk_sync_to_redis
from backend.redis_client import redis_client

class Command(BaseCommand):
    def handle(self, *args, **options):
        academic_term = TtAcademicTerm.objects.filter(id=4).prefetch_related("week").first()
        academic_term_id = academic_term.id
        week_ids = list(w.id for w in academic_term.week.all())
        weeks = list(w.week for w in academic_term.week.all())
        redis_weeks = convert_to_redis_week(weeks)

        redis_data={
            "update":{},
        }
        redis_table = "activity_template"
        models = TtActivityTemplate.objects.filter(academic_term_id=academic_term_id).prefetch_related("week")
        with transaction.atomic():
            for val in models:
                val.week.set(week_ids)
                redis_data["update"].setdefault(redis_table, []).append({
                    "id": val.id,
                    "week_pattern": redis_weeks,
                })

        bulk_sync_to_redis(redis_client, redis_data)

        redis_data={
            "update":{},
        }
        redis_table = "module"
        models = TtModule.objects.filter(academic_term_id=academic_term_id).prefetch_related("week")
        with transaction.atomic():
            for val in models:
                val.week.set(week_ids)
                redis_data["update"].setdefault(redis_table, []).append({
                    "id": val.id,
                    "week_pattern": redis_weeks,
                })

        bulk_sync_to_redis(redis_client, redis_data)