from rest_framework import serializers
from .models import Department
from teacher_management.serializers import TeacherSerializer
from status.serializers import StatusSerializer
from status.models import Status

class DepartmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Department
        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:
                # Try by slug first
                status_obj = Status.objects.get(slug=data['status'])
                data['status'] = status_obj.pk
            except Status.DoesNotExist:
                # Then by title (backward compatibility)
                try:
                    status_obj = Status.objects.get(title=data['status'], type='department')
                    data['status'] = status_obj.pk
                except Status.DoesNotExist:
                    # If it's a slug that doesn't exist, try getting the default for department
                    try:
                        default_status = Status.objects.get(slug='active-department')
                        data['status'] = default_status.pk
                    except Status.DoesNotExist:
                        data.pop('status', None)
        return super().to_internal_value(data)

class DepartmentListSerializer(serializers.ModelSerializer):
    head_teacher = TeacherSerializer()
    status = StatusSerializer()

    class Meta:
        model = Department
        fields = ('department_id', 'department_name', 'slug', 'department_code', 'head_teacher', 'status', 'created_at')
