package txt

import (
	"strings"
)

const (
	Ellipsis        = "…"
	ClipCountryCode = 2
	ClipKeyword     = 40
	ClipUsername    = 64
	ClipSlug        = 80
	ClipCategory    = 100
	ClipPlace       = 128
	ClipDefault     = 160
	ClipName        = 160
	ClipTitle       = 200
	ClipVarchar     = 255
	ClipLabel       = 500
	ClipQuery       = 1000
	ClipDescription = 16000
)

// Clip shortens a string to the given number of runes, and removes all leading and trailing white space.
func Clip(s string, size int) string {
	s = strings.TrimSpace(s)

	if s == "" || size <= 0 {
		return ""
	}

	runes := []rune(s)

	if len(runes) > size {
		s = string(runes[0 : size-1])
	}

	return strings.TrimSpace(s)
}

// Shorten shortens a string with suffix.
func Shorten(s string, size int, suffix string) string {
	if suffix == "" {
		suffix = Ellipsis
	}

	l := len(suffix)

	if len(s) < size || size < l+1 {
		return s
	}

	return Clip(s, size-l) + suffix
}
