package helpers

import (
	"github.com/aymerick/raymond"
	"github.com/gosimple/slug"
	"github.com/zk-org/zk/internal/util"
)

// NewSlugHelper creates a new template helper to slugify text.
//
// {{slug "This will be slugified!"}} -> this-will-be-slugified
// {{#slug}}This will be slugified!{{/slug}} -> this-will-be-slugified
func NewSlugHelper(lang string, logger util.Logger) any {
	return func(opt any) string {
		switch arg := opt.(type) {
		case *raymond.Options:
			return slug.MakeLang(arg.Fn(), lang)
		case string:
			return slug.MakeLang(arg, lang)
		default:
			logger.Printf("the {{slug}} template helper is expecting a string as argument, received: %v", opt)
			return ""
		}
	}
}
