package evaluator

import (
	"regexp"
	"strings"
)

var (
	TOKEN_ESCAPED_QUOTE     = regexp.MustCompile(`\\"`)
	TOKEN_ESCAPED_ESCAPE    = regexp.MustCompile(`\\\\`)
	TOKEN_ENV_INTERPOLATION = regexp.MustCompile("(\\\\\\\\+|[^\\\\]|\\b|\\A)\\$({?)([[:alnum:]_]+)(}?)")
)

func stripQuotes(str string) string {
	str = str[1 : len(str)-1]
	str = TOKEN_ESCAPED_QUOTE.ReplaceAllString(str, `"`)
	return TOKEN_ESCAPED_ESCAPE.ReplaceAllString(str, `\`)
}

func replaceEnv(b *buildFile, str string) string {
	for _, match := range TOKEN_ENV_INTERPOLATION.FindAllString(str, -1) {
		match = match[strings.Index(match, "$"):]
		matchKey := strings.Trim(match, "${}")

		for envKey, envValue := range b.env {
			if matchKey == envKey {
				str = strings.Replace(str, match, envValue, -1)
			}
		}
	}

	return str
}