// Package style provides a shell script interface for Lip Gloss.
// https://github.com/charmbracelet/lipgloss
//
// It allows you to use Lip Gloss to style text without needing to use Go. All
// of the styling options are available as flags.
package style

import (
	"errors"
	"strings"

	"charm.land/gum/v2/internal/stdin"
	"charm.land/gum/v2/internal/tty"
)

// Run provides a shell script interface for the Lip Gloss styling.
// https://github.com/charmbracelet/lipgloss
func (o Options) Run() error {
	var text string
	if len(o.Text) > 0 {
		text = strings.Join(o.Text, "\n")
	} else {
		text, _ = stdin.Read(stdin.StripANSI(o.StripANSI))
		if text == "" {
			return errors.New("no input provided, see `gum style --help`")
		}
	}
	if o.Trim {
		var lines []string
		for _, line := range strings.Split(text, "\n") {
			lines = append(lines, strings.TrimSpace(line))
		}
		text = strings.Join(lines, "\n")
	}
	tty.Println(o.Style.ToLipgloss().Render(text))
	return nil
}
