package service

func mask(str string, start, end int) string {
	maskLen := end - start
	if maskLen < 0 {
		panic("end cannot be greater than start")
	}
	var maskStr string
	for i := 0; i <= maskLen; i++ {
		maskStr += "*"
	}
	runes := []rune(str)
	return string(append(runes[:start], append([]rune(maskStr), runes[end+1:]...)...))
}

func maskLeft(str string, reserve int) string {
	runes := []rune(str)
	if len(runes)-reserve < 0 {
		panic("length of reserved string is out of range")
	}
	for i := 0; i < len(runes)-reserve; i++ {
		runes[i] = '*'
	}
	return string(runes)
}

func maskRight(str string, reserve int) string {
	runes := []rune(str)
	if len(runes)-reserve < 0 {
		panic("length of reserved string is out of range")
	}
	for i := len(runes) - 1; i > len(runes)-reserve; i-- {
		runes[i] = '*'
	}
	return string(runes)
}