package stringslice

import (
	"strconv"
	"strings"
)

// StringSliceToIntSlice converts a slice of strings to a slice of ints.
// Returns an error if any values cannot be parsed.
func StringSliceToIntSlice(ss []string) ([]int, error) {
	ret := make([]int, len(ss))
	for i, v := range ss {
		var err error
		ret[i], err = strconv.Atoi(v)
		if err != nil {
			return nil, err
		}
	}

	return ret, nil
}

// FromString converts a string to a slice of strings, splitting on the sep character.
// Unlike strings.Split, this function will also trim whitespace from the resulting strings.
func FromString(s string, sep string) []string {
	v := strings.Split(s, ",")
	for i, vv := range v {
		v[i] = strings.TrimSpace(vv)
	}
	return v
}

// Unique returns a slice containing only unique values from the provided slice.
// The comparison is case-insensitive.
func UniqueFold(s []string) []string {
	seen := make(map[string]struct{})
	var ret []string
	for _, v := range s {
		if _, exists := seen[strings.ToLower(v)]; exists {
			continue
		}
		seen[strings.ToLower(v)] = struct{}{}
		ret = append(ret, v)
	}
	return ret
}
