import json
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from .models import BatchYear
from django.conf import settings
import os
from datetime import datetime

class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

def export_batch_year_data():
    batch_years_data = []
    batch_years = BatchYear.objects.all()
    
    for batch_year in batch_years:
        # Add the original data
        batch_years_data.append({
            'year_id': batch_year.year_id,
            'title': batch_year.title,
            'slug': batch_year.slug,
            'code': batch_year.code,
            'created_at': batch_year.created_at
        })
        
        # Add the alternative format for "First Year"
        if batch_year.title == 'First Year':
            batch_years_data.insert(0, {
                'year_id': batch_year.year_id + 4, # to make it unique, as in the example
                'title': '1st Year',
                'slug': '1st-year',
                'code': '1Y',
                'created_at': batch_year.created_at
            })

    file_path = os.path.join(settings.DATA_CACHE_DIR, 'batch_year.json')
    os.makedirs(os.path.dirname(file_path), exist_ok=True)
    with open(file_path, 'w') as f:
        json.dump(batch_years_data, f, indent=4, cls=DateTimeEncoder)

@receiver(post_save, sender=BatchYear)
def save_batch_year_signal(sender, instance, **kwargs):
    export_batch_year_data()

@receiver(post_delete, sender=BatchYear)
def delete_batch_year_signal(sender, instance, **kwargs):
    export_batch_year_data()
