package utils

import (
	crypto_rand "crypto/rand"
	"encoding/hex"
	"math/rand"
	"time"
)

var Rand *privateRand

type privateRand struct {
	*rand.Rand
}

func init() {
	Rand = &privateRand{rand.New(rand.NewSource(time.Now().UnixNano()))}
}

func (p *privateRand) Number(numberRange ...int) int {
	nr := 0
	if len(numberRange) > 1 {
		nr = 1
		nr = p.Intn(numberRange[1]-numberRange[0]) + numberRange[0]
	} else {
		nr = p.Intn(numberRange[0])
	}
	return nr
}

func TokenGenerator(len int) string {
	b := make([]byte, len/2)
	crypto_rand.Read(b)
	return hex.EncodeToString(b)
}