from rest_framework import serializers
from .models import JobPost, JobApplication, AcademicQualification, Department, Country, State, City


class DepartmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Department
        fields = ['id', 'name']

class JobPostSerializer(serializers.ModelSerializer):
    department = DepartmentSerializer(read_only=True)
    department_id = serializers.PrimaryKeyRelatedField(queryset=Department.objects.all(), source='department', write_only=True)

    class Meta:
        model = JobPost
        fields = ['id', 'title', 'department', 'department_id', 'description', 'job_created_at', 'job_last_date']


class CountrySerializer(serializers.ModelSerializer):
    class Meta:
        model = Country
        fields = ['id', 'name']

class StateSerializer(serializers.ModelSerializer):
    country = CountrySerializer(read_only=True)
    country_id = serializers.PrimaryKeyRelatedField(queryset=Country.objects.all(), source='country', write_only=True)
    class Meta:
        model = State
        fields = ['id', 'name', 'country', 'country_id']

class CitySerializer(serializers.ModelSerializer):
    state = StateSerializer(read_only=True)
    state_id = serializers.PrimaryKeyRelatedField(queryset=State.objects.all(), source='state', write_only=True)
    class Meta:
        model = City
        fields = ['id', 'name', 'state', 'state_id']

class AcademicQualificationSerializer(serializers.ModelSerializer):
    class Meta:
        model = AcademicQualification
        fields = ['id', 'degree', 'specialization', 'institute', 'year', 'marks']


class JobApplicationSerializer(serializers.ModelSerializer):
    country = CountrySerializer(read_only=True)
    country_id = serializers.PrimaryKeyRelatedField(queryset=Country.objects.all(), source='country', write_only=True)
    state = StateSerializer(read_only=True)
    state_id = serializers.PrimaryKeyRelatedField(queryset=State.objects.all(), source='state', write_only=True)
    city = CitySerializer(read_only=True)
    city_id = serializers.PrimaryKeyRelatedField(queryset=City.objects.all(), source='city', write_only=True)
    department = DepartmentSerializer(read_only=True)
    department_id = serializers.PrimaryKeyRelatedField(queryset=Department.objects.all(), source='department', write_only=True)
    qualifications = AcademicQualificationSerializer(many=True, required=False)

    class Meta:
        model = JobApplication
        fields = [
            'id', 'first_name', 'last_name', 'father_name', 'date_of_birth', 'gender', 'email', 'mobile',
            'country', 'country_id', 'state', 'state_id', 'city', 'city_id', 'category', 'nationality',
            'correspondence_address', 'permanent_address', 'marital_status', 'position_applied_for',
            'department', 'department_id', 'job_post', 'qualifications'
        ]

    def create(self, validated_data):
        qualifications_data = validated_data.pop('qualifications', [])
        job_application = JobApplication.objects.create(**validated_data)
        for qual_data in qualifications_data:
            AcademicQualification.objects.create(job_application=job_application, **qual_data)
        return job_application
