package themes

import (
	"lmika.dev/lmika/hugo-cms/models"
	"lmika.dev/pkg/modash/momap"
	"slices"
	"sort"
)

type Provider struct {
	themes     []models.ThemeMeta
	themeIndex map[string]models.ThemeMeta
}

func New() *Provider {
	ts := slices.Clone(themes)
	sort.Slice(ts, func(i, j int) bool { return ts[i].Name < ts[j].Name })
	ti := momap.IndexSlice(themes, func(m models.ThemeMeta) string { return m.ID })

	return &Provider{
		themes:     ts,
		themeIndex: ti,
	}
}

func (p *Provider) Themes() []models.ThemeMeta {
	return p.themes
}

func (p *Provider) Lookup(name string) (models.ThemeMeta, bool) {
	t, ok := p.themeIndex[name]
	return t, ok
}