package format

import (
	"strings"

	"github.com/mitchellh/colorstring"
	wordwrap "github.com/mitchellh/go-wordwrap"
)

// HorizontalRule returns a newline character followed by a number of
// horizontal line characters to fill the given width.
//
// If the given colorize has colors enabled, the rule will also be given a
// dark grey color to attempt to visually de-emphasize it for sighted users.
//
// This is intended for printing to the UI via mitchellh/cli.UI.Output, or
// similar, which will automatically append a trailing newline too.
func HorizontalRule(color *colorstring.Colorize, width int) string {
	if width <= 1 {
		return "\n"
	}
	rule := strings.Repeat("─", width-1)
	if color == nil { // sometimes unit tests don't populate this properly
		return "\n" + rule
	}
	return color.Color("[dark_gray]\n" + rule)
}

// WordWrap takes a string containing unbroken lines of text and inserts
// newline characters to try to make the text fit within the given width.
//
// The string can already contain newline characters, for example if you are
// trying to render multiple paragraphs of text. (In that case, our usual
// style would be to have _two_ newline characters as the paragraph separator.)
//
// As a special case, any line that begins with at least one space will be left
// unbroken. This allows including literal segments in the output, such as
// code snippets or filenames, where word wrapping would be confusing.
func WordWrap(str string, width int) string {
	if width <= 1 {
		// Silly edge case. We'll just return the original string to avoid
		// panicking or doing other weird stuff.
		return str
	}

	var buf strings.Builder
	lines := strings.Split(str, "\n")
	for i, line := range lines {
		if !strings.HasPrefix(line, " ") {
			line = wordwrap.WrapString(line, uint(width-1))
		}
		if i > 0 {
			buf.WriteByte('\n') // reintroduce the newlines we skipped in Scan
		}
		buf.WriteString(line)
	}
	return buf.String()
}
