package utils

type BasicType interface {
	int | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string
}

func InArray[T BasicType](needle T, hystack []T) bool {
	for _, item := range hystack {
		if needle == item {
			return true
		}
	}

	return false
}

func SliceArray[T any](arr []T, offset int, limit int) []T {
	size := len(arr)
	if size <= offset {
		return []T{}
	} else if size > offset && size < offset+limit {
		return arr[offset:size]
	} else {
		return arr[offset : offset+limit]
	}
}

func ToMap[K comparable, T any](arr []T, getKey func(*T) K) map[K]T {
	r := make(map[K]T)
	for _, v := range arr {
		k := getKey(&v)
		r[k] = v
	}
	return r
}

// func InArray(needle interface{}, hystack interface{}) bool {
// 	switch key := needle.(type) {
// 	case string:
// 		for _, item := range hystack.([]string) {
// 			if key == item {
// 				return true
// 			}
// 		}
// 	case int:
// 		for _, item := range hystack.([]int) {
// 			if key == item {
// 				return true
// 			}
// 		}
// 	case int64:
// 		for _, item := range hystack.([]int64) {
// 			if key == item {
// 				return true
// 			}
// 		}
// 	default:
// 		return false
// 	}
// 	return false
// }
