package amvs

import (
	"sort"

	"github.com/aerogo/aero"
	"github.com/animenotifier/arn"
	"github.com/animenotifier/notify.moe/components"
	"github.com/animenotifier/notify.moe/utils"
)

// Latest AMVs.
func Latest(ctx *aero.Context) string {
	user := utils.GetUser(ctx)

	amvs := arn.FilterAMVs(func(amv *arn.AMV) bool {
		return !amv.IsDraft
	})

	sort.Slice(amvs, func(i, j int) bool {
		return amvs[i].Created > amvs[j].Created
	})

	return ctx.HTML(components.AMVs(amvs, -1, "", user))
}

// Best AMVs.
func Best(ctx *aero.Context) string {
	user := utils.GetUser(ctx)

	amvs := arn.FilterAMVs(func(amv *arn.AMV) bool {
		return !amv.IsDraft
	})

	sort.Slice(amvs, func(i, j int) bool {
		if len(amvs[i].Likes) == len(amvs[j].Likes) {
			return amvs[i].Title.String() < amvs[j].Title.String()
		}

		return len(amvs[i].Likes) > len(amvs[j].Likes)
	})

	return ctx.HTML(components.AMVs(amvs, -1, "", user))
}