from rest_framework import serializers
from applications.models import Application
from job.api.serializers import JobSerializer


class ApplicationSerializer(serializers.ModelSerializer):
    job_details = JobSerializer(source='job', read_only=True)
    username = serializers.CharField(source='user.username', read_only=True)
    email = serializers.CharField(source='user.email', read_only=True)
    
    class Meta:
        model = Application
        fields = ('id', 'username', 'email', 'job', 'job_details', 'status', 'applied_at', 'updated_at')
        read_only_fields = ('id', 'applied_at', 'updated_at', 'username', 'email')


class ApplicationCreateSerializer(serializers.ModelSerializer):
    """Serializer for creating applications"""
    
    class Meta:
        model = Application
        fields = ('job',)
    
    def create(self, validated_data):
        """Create application with the current user"""
        validated_data['user'] = self.context['request'].user
        return super().create(validated_data)


class UserApplicationSerializer(serializers.ModelSerializer):
    """Serializer for user's applications (from profile view)"""
    job_details = JobSerializer(source='job', read_only=True)
    
    class Meta:
        model = Application
        fields = ('id', 'job', 'job_details', 'status', 'applied_at', 'updated_at')
        read_only_fields = ('id', 'applied_at', 'updated_at')
