package string_tools

import (
	"regexp"
	"strings"
)

var (
	replacer = strings.NewReplacer(
		"а", "a",
		"б", "b",
		"в", "v",
		"г", "g",
		"д", "d",
		"е", "e",
		"ё", "yo",
		"ж", "zh",
		"з", "z",
		"и", "i",
		"й", "y",
		"к", "k",
		"л", "l",
		"м", "m",
		"н", "n",
		"о", "o",
		"п", "p",
		"р", "r",
		"с", "s",
		"т", "t",
		"у", "u",
		"ф", "f",
		"х", "h",
		"ц", "ts",
		"ч", "ch",
		"ш", "sh",
		"щ", "sch",
		"ъ", "",
		"ы", "y",
		"ь", "",
		"э", "e",
		"ю", "yu",
		"я", "ya",
		" ", "_",
	)
)

// Transliterate выполняет транслитерацию русского текста в латиницу,
// заменяет пробелы на _, удаляет все остальные символы, кроме цифр (знаки препинания и т.д.)
func Transliterate(text string) string {

	// Приводим к нижнему регистру и транслитерируем
	result := replacer.Replace(strings.ToLower(text))

	// Удаляем все символы, кроме букв латиницы, подчеркивания и цифр
	reg := regexp.MustCompile(`[^a-z0-9_]`)
	result = reg.ReplaceAllString(result, "")

	// Удаляем множественные подчеркивания (опционально)
	regMulti := regexp.MustCompile(`_+`)
	result = regMulti.ReplaceAllString(result, "_")

	// Удаляем подчеркивания в начале и конце строки (опционально)
	result = strings.Trim(result, "_")

	return result
}
