from rest_framework import serializers
from .models import Batch
from departments.serializers import DepartmentSerializer
from teacher_management.serializers import TeacherSerializer
from status.serializers import StatusSerializer

from status.models import Status

class BatchSerializer(serializers.ModelSerializer):
    class Meta:
        model = Batch
        fields = '__all__'
        read_only_fields = ('slug',)

    def to_internal_value(self, data):
        # Handle status slug to ID mapping
        if 'status' in data and isinstance(data['status'], str):
            try:
                status_obj = Status.objects.get(slug=data['status'])
                data['status'] = status_obj.pk
            except Status.DoesNotExist:
                # If it's a slug that doesn't exist, try getting the default for batch
                try:
                    default_status = Status.objects.get(slug='active-batch')
                    data['status'] = default_status.pk
                except Status.DoesNotExist:
                    data.pop('status', None)
        
        # Ensure years are integers if they come as strings
        for field in ['start_year', 'end_year']:
            if field in data and data[field] == '':
                data[field] = None
            elif field in data and data[field] is not None:
                try:
                    data[field] = int(data[field])
                except (ValueError, TypeError):
                    pass
                    
        return super().to_internal_value(data)

class BatchListSerializer(serializers.ModelSerializer):
    department = DepartmentSerializer()
    advisor = TeacherSerializer()
    status = StatusSerializer()

    class Meta:
        model = Batch
        fields = ('batch_id', 'batch_name', 'slug', 'department', 'start_year', 'end_year', 'advisor', 'status')
