from rest_framework import serializers
from .models import TaskType


class TaskTypeSerializer(serializers.ModelSerializer):
    """
    Serializer for TaskType model
    """

    created_at_formatted = serializers.DateTimeField(
        source="created_at", format="%d %b %Y", read_only=True
    )
    updated_at_formatted = serializers.DateTimeField(
        source="updated_at", format="%d %b %Y", read_only=True
    )

    class Meta:
        model = TaskType
        fields = [
            "id",
            "name",
            "code",
            "description",
            "is_active",
            "created_at",
            "updated_at",
            "created_at_formatted",
            "updated_at_formatted",
        ]
        read_only_fields = ["id", "created_at", "updated_at"]

    def validate_name(self, value):
        """Ensure name is unique (case-insensitive)"""
        if (
            TaskType.objects.filter(name__iexact=value)
            .exclude(id=self.instance.id if self.instance else None)
            .exists()
        ):
            raise serializers.ValidationError(
                "Task type with this name already exists."
            )
        return value

    def validate_code(self, value):
        """Ensure code is unique (case-insensitive)"""
        if (
            TaskType.objects.filter(code__iexact=value)
            .exclude(id=self.instance.id if self.instance else None)
            .exists()
        ):
            raise serializers.ValidationError(
                "Task type with this code already exists."
            )
        return value
