package strings

import (
	"crypto/md5"
	"fmt"
	"golang.org/x/exp/constraints"
	"io"
	"strconv"
	"strings"
)

func Join(s ...string) (str string) {
	if len(s) == 1 {
		return s[0]
	} else if len(s) > 1 {
		b := strings.Builder{}
		for _, s2 := range s {
			b.WriteString(s2)
		}
		str = b.String()
	}
	return
}

func ToInteger[T constraints.Integer](s string, defaults T) T {
	if s == "" {
		return defaults
	}
	i, err := strconv.ParseInt(s, 10, 64)
	if err != nil {
		return defaults
	}
	return T(i)
}

func Md5(str string) string {
	h := md5.New()
	_, err := io.WriteString(h, str)
	if err != nil {
		return ""
	}
	return fmt.Sprintf("%x", h.Sum(nil))
}
