package rest

import (
	"bytes"
	"strings"
	"unicode"
)

// CamelToSnake преобразует строку из CamelCase в snake_case.
func camelToSnake(s string) string {
	var result bytes.Buffer
	var lastIndex int = 0

	for i, char := range s {
		if i > 0 && unicode.IsUpper(char) && ((i+1 < len(s) && unicode.IsLower(rune(s[i+1]))) || unicode.IsLower(rune(s[i-1]))) {
			result.WriteString(strings.ToLower(s[lastIndex:i]))
			if lastIndex != i {
				result.WriteString("_")
			}
			lastIndex = i
		}
	}
	result.WriteString(strings.ToLower(s[lastIndex:]))

	return result.String()
}