from rest_framework import serializers

from .models import Video, Playlist, Category, TagToObject, PlaylistVideo


class TagToObjectSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source='tag.id')
    name = serializers.CharField(source='tag.name')

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


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['id', 'name']


class VideoSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(many=True)
    tags = TagToObjectSerializer(many=True)

    class Meta:
        model = Video
        fields = [
            'id',
            'title',
            'slug',
            'description',
            's3_file',
            'thumbnail',
            'categories',
            'tags',
        ]


class PlaylistVideoSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source='video.id')
    title = serializers.CharField(source='video.title')
    slug = serializers.CharField(source='video.slug')
    description = serializers.CharField(source='video.description')
    s3_file = serializers.CharField(source='video.s3_file')
    thumbnail = serializers.CharField(source='video.thumbnail')
    categories = CategorySerializer(source='video.categories', many=True)
    tags = TagToObjectSerializer(source='video.tags', many=True)

    class Meta:
        model = PlaylistVideo
        fields = [
            'id',
            'title',
            'slug',
            'description',
            's3_file',
            'thumbnail',
            'categories',
            'tags',
        ]


class PlaylistSerializer(serializers.ModelSerializer):
    video = PlaylistVideoSerializer(source='playlist_video', many=True)
    tags = TagToObjectSerializer(many=True)

    class Meta:
        model = Playlist
        fields = [
            'id',
            'title',
            'description',
            'sort',
            'type',
            'mrss',
            'json',
            'video',
            'tags',
        ]