package models

import (
	"github.com/samber/lo"
	"go.fifitido.net/ytdl-web/pkg/ytdl/metadata"
)

type Video struct {
	Meta    *metadata.Metadata
	Formats []metadata.Format
}

func GetVideosFromMetadata(meta *metadata.Metadata) []Video {
	if meta.IsPlaylist() {
		return lo.Map(meta.Entries, func(video metadata.Metadata, _ int) Video {
			return GetVideosFromMetadata(&video)[0]
		})
	}

	formats := lo.Filter(meta.Formats, func(item metadata.Format, _ int) bool {
		return item.ACodec != "none" && item.VCodec != "none" && item.Protocol != "m3u8_native"
	})

	for i, j := 0, len(formats)-1; i < j; i, j = i+1, j-1 {
		formats[i], formats[j] = formats[j], formats[i]
	}

	return []Video{
		{
			Meta:    meta,
			Formats: formats,
		},
	}
}
