"""DMS repositories — REST serializers."""

from __future__ import annotations

from rest_framework import serializers

from simorgh.apps.dms.repositories.models import Folder, Repository


# ---------------------------------------------------------------------------
# Repository serializers
# ---------------------------------------------------------------------------

class RepositorySerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(source="public_id", read_only=True)
    workspace_id = serializers.UUIDField(source="workspace.public_id", read_only=True, allow_null=True)

    class Meta:
        model = Repository
        fields = (
            "id",
            "public_id",
            "name",
            "slug",
            "description",
            "workspace_id",
            "is_default",
            "max_size_bytes",
            "created_at",
            "updated_at",
        )
        read_only_fields = fields


class RepositoryCreateInputSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=200)
    slug = serializers.SlugField(max_length=120)
    description = serializers.CharField(required=False, default="", allow_blank=True)
    workspace_id = serializers.UUIDField(required=False, allow_null=True)
    is_default = serializers.BooleanField(required=False, default=False)
    max_size_bytes = serializers.IntegerField(required=False, allow_null=True, min_value=1)


class RepositoryUpdateInputSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=200, required=False)
    description = serializers.CharField(required=False, allow_blank=True)
    max_size_bytes = serializers.IntegerField(required=False, allow_null=True, min_value=1)


# ---------------------------------------------------------------------------
# Folder serializers
# ---------------------------------------------------------------------------

class FolderSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(source="public_id", read_only=True)
    repository_id = serializers.UUIDField(source="repository.public_id", read_only=True)
    parent_id = serializers.UUIDField(source="parent.public_id", read_only=True, allow_null=True)

    class Meta:
        model = Folder
        fields = (
            "id",
            "public_id",
            "repository_id",
            "parent_id",
            "name",
            "materialized_path",
            "depth",
            "sort_order",
            "color",
            "icon",
            "is_system",
            "created_at",
            "updated_at",
        )
        read_only_fields = fields


class FolderCreateInputSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=255)
    sort_order = serializers.IntegerField(required=False, default=0)
    color = serializers.CharField(max_length=32, required=False, default="", allow_blank=True)
    icon = serializers.CharField(max_length=64, required=False, default="", allow_blank=True)


class FolderRenameInputSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=255)


class FolderMoveInputSerializer(serializers.Serializer):
    parent_id = serializers.UUIDField(required=False, allow_null=True)
