from rest_framework import serializers
from apps.companies.models import DealershipDepartment, Dealership
from apps.companies.serializers import DealershipSerializer


class DealershipDepartmentSerializer(serializers.ModelSerializer):
    dealership = DealershipSerializer(read_only=True)

    class Meta:
        model = DealershipDepartment
        fields = ['id', 'name', 'phone_number', 'created_at', 'dealership']
        read_only_fields = ['id', 'created_at', 'updated_at']

class DealershipDepartmentCallSerializer(serializers.ModelSerializer):

    class Meta:
        model = DealershipDepartment
        fields = ['id', 'name', 'phone_number']

class DealershipDepartmentCreateSerializer(serializers.ModelSerializer):
    dealership_id = serializers.PrimaryKeyRelatedField(
        source='dealership',
        queryset=Dealership.objects.all(),
        write_only=True
    )

    dealership = DealershipSerializer(read_only=True)

    class Meta:
        model = DealershipDepartment
        fields = [
            'id',
            'name',
            'phone_number',
            'dealership_id',
            'dealership',
        ]
        read_only_fields = ['id']

    def validate(self, attrs):
        dealership = (attrs.get('dealership')
                      or getattr(self.instance, 'dealership', None))
        name = attrs.get('name')

        if not dealership and not name:
            return attrs

        qs = DealershipDepartment.objects.filter(
            dealership=dealership,
            name__iexact=name
        )

        if self.instance:
            qs = qs.exclude(id=self.instance.id)

        if qs.exists():
            raise serializers.ValidationError({
                "name": "A department with this name already exists for this dealership."
            })

        return attrs
