package fullpage

import (
	"encoding/json"
	"io/ioutil"
	"sort"

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

var organization map[string]interface{}
var organizationString string

func init() {
	// Load structured data
	organizationBytes, _ := ioutil.ReadFile("organization.json")
	json.Unmarshal(organizationBytes, &organization)
	organizationBytes, _ = json.Marshal(organization)
	organizationString = string(organizationBytes)
}

// Render layout.
func Render(ctx *aero.Context, content string) string {
	user := utils.GetUser(ctx)
	openGraph, _ := ctx.Data.(*arn.OpenGraph)

	// Make output order deterministic to profit from Aero caching.
	// To do this, we need to create slices and sort the tags.
	var meta []string
	var tags []string

	if openGraph != nil {
		for name := range openGraph.Meta {
			meta = append(meta, name)
		}

		sort.Strings(meta)

		for name := range openGraph.Tags {
			tags = append(tags, name)
		}

		sort.Strings(tags)
	}

	return components.Layout(ctx.App, ctx, user, openGraph, meta, tags, organizationString, content)
}