from rest_framework import serializers
from apps.files.models import PostFileModel


class PostFileSerializer(serializers.ModelSerializer):
    """Serializer for PostFileModel."""

    filename = serializers.SerializerMethodField()
    thumbnails = serializers.SerializerMethodField()
    download_url = serializers.SerializerMethodField()

    class Meta:
        model = PostFileModel
        fields = [
            "hash_blake3",
            "file_type",
            "file",
            "thumbnail",
            "filename",
            "thumbnails",
            "download_url",
        ]

    def get_filename(self, obj):
        try:
            return obj.name.first().filename
        except (AttributeError, IndexError):
            return "Unknown"

    def get_thumbnails(self, obj):
        base_url = f"/api/files/{obj.hash_blake3}/"
        thumbnails = {}
        for size_key in ["sx", "sm", "md", "lg", "xl"]:
            thumbnails[size_key] = f"{base_url}?t={size_key}"
        return thumbnails

    def get_download_url(self, obj):
        return f"/api/files/{obj.hash_blake3}/?d=0"


class FileResponseSerializer(serializers.Serializer):
    """
    Dummy serializer for file response schema documentation.
    This is only used for OpenAPI schema generation and will never be used to serialize data.
    """

    file = serializers.FileField(help_text="The file content")


class ErrorResponseSerializer(serializers.Serializer):
    """
    Serializer for error responses.
    """

    error = serializers.CharField(help_text="Error message")