package utils

// IsBoolCountLessThanN takes an int (n), bool (v), and then a variadic slice of bool (vals). If the number of bools in vals with
// the value v is more than n, it returns false, otherwise it returns true.
func IsBoolCountLessThanN(n int, v bool, vals ...bool) bool {
	lvals := len(vals)

	// If lvals (len of vals) is less than n it can't possibly have more than n so we can short circuit here.
	if lvals < n {
		return true
	}

	j := 0

	for i, val := range vals {
		if val == v {
			j++
		}

		// If lvals (len of vals) minus the current index (the remainder) plus the number of positives
		// is less than n we can short circuit here.
		if lvals-i+j < n {
			return true
		}

		if j > n {
			return false
		}
	}

	return true
}