from django.contrib import admin
from .models import AppSettings

# Import all the export functions
from batch.signals import export_batch_data
from batch_year.signals import export_batch_year_data
from classroom.signals import export_classroom_data
from days.signals import export_days_to_json
from departments.signals import export_departments_to_json
from semester.signals import export_semesters_to_json
from status.signals import export_status_to_json
from teacher_management.signals import export_teachers_to_json
from timeslot.signals import export_timeslots_to_json

# For courses, import model and serializer
from course.models import Course
from course.serializers import CourseSerializer
from django.conf import settings
import json
import os

@admin.register(AppSettings)
class AppSettingsAdmin(admin.ModelAdmin):
    list_display = ('key', 'value', 'description')
    list_editable = ('value',)
    search_fields = ('key', 'description')

    def save_model(self, request, obj, form, change):
        # Check if the setting being changed is 'use_cache' and if its value is changing.
        if obj.key == 'use_cache' and 'value' in form.changed_data:
            # If the new value is True, regenerate the cache.
            if obj.value:
                self.message_user(request, "Regenerating cache...")
                try:
                    export_batch_data()
                    export_batch_year_data()
                    export_classroom_data()
                    
                    # Replicated logic for courses
                    file_path = os.path.join(settings.DATA_CACHE_DIR, 'courses.json')
                    courses = Course.objects.all()
                    serializer = CourseSerializer(courses, many=True)
                    with open(file_path, 'w') as f:
                        json.dump(serializer.data, f, indent=4)

                    export_days_to_json()
                    export_departments_to_json()
                    export_semesters_to_json()
                    export_status_to_json()
                    export_teachers_to_json()
                    export_timeslots_to_json()
                    self.message_user(request, "Cache regenerated successfully.", level='SUCCESS')
                except Exception as e:
                    self.message_user(request, f"Error regenerating cache: {e}", level='ERROR')

        super().save_model(request, obj, form, change)
