package utils

import (
	"fmt"
	"regexp"
)

const (
	char = "&"
)

// Colors: http://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html
var re = regexp.MustCompile(char + `(?m)([0-9]{1,2};[0-9]{1,2}|[0-9]{1,2})`)

func Color(str string) string {
	result := ""
	lastIndex := 0

	for _, v := range re.FindAllSubmatchIndex([]byte(str), -1) {
		groups := []string{}
		for i := 0; i < len(v); i += 2 {
			groups = append(groups, str[v[i]:v[i+1]])
		}

		result += str[lastIndex:v[0]] + "\033[" + groups[1] + "m"
		lastIndex = v[1]
	}

	return result + str[lastIndex:]
}

func Colorf(format string, a ...any) string {
	return fmt.Sprintf(Color(format), a...)
}
