package mailer

import (
	"bytes"
	_ "embed"
	"html/template"
)

//go:embed templates/welcome.html
var templatesWelcome string

type TemplateDefaults struct {
	CompanyName        string
	CompanyAddress     string
	CompanyURL         string
	ActivateAccountURL string
	UnsubscribeURL     string
}

type TemplateProps struct {
	Defaults TemplateDefaults
	Data     map[string]string
}

func (tp *TemplateProps) Set(key, value string) {
	tp.Data[key] = value
}

func DefaultTemplateData() TemplateProps {
	return TemplateProps{
		Defaults: TemplateDefaults{
			CompanyName:        "Haybytes.com",
			CompanyAddress:     "123 Main St, Anytown, CA 12345",
			CompanyURL:         "https://haybytes.com",
			ActivateAccountURL: "https://google.com",
			UnsubscribeURL:     "https://google.com",
		},
		Data: make(map[string]string),
	}
}

func render(tpl string, data TemplateProps) (string, error) {
	tmpl, err := template.New("name").Parse(tpl)
	if err != nil {
		return "", err
	}

	var tplBuffer bytes.Buffer

	err = tmpl.Execute(&tplBuffer, data)

	if err != nil {
		return "", err
	}

	return tplBuffer.String(), nil
}

func RenderWelcome() (string, error) {
	return render(templatesWelcome, DefaultTemplateData())
}
