package styling

import (
	"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/message/entity"
)

// StyledTextOption is an option for styling text.
type StyledTextOption struct {
	size    int
	perform func(b *textBuilder) error
}

// Zero returns true if option is zero value.
func (s StyledTextOption) Zero() bool {
	return s.perform == nil
}

func styledTextOption(s string, perform func(b *textBuilder) error) StyledTextOption {
	return StyledTextOption{
		perform: perform,
		size:    len(s),
	}
}

// Plain formats text without any entities.
func Plain(s string) StyledTextOption {
	return styledTextOption(s, func(b *textBuilder) error {
		b.Plain(s)
		return nil
	})
}

// Custom formats text using given callback.
func Custom(cb func(eb *entity.Builder) error) StyledTextOption {
	return StyledTextOption{
		size: 0,
		perform: func(b *textBuilder) error {
			return cb(b.Builder)
		},
	}
}

//go:generate go run go.mau.fi/mautrix-telegram/pkg/gotd/telegram/message/internal/mkentity -template styling -output options.gen.go
