package helpers

import (
	"crypto/rand"
	"fmt"
)

func GeneratesOTP(length int) (string, error) {
	if length <= 0 {
		length = 6
	}

	max := 1
	for i := 0; i < length; i++ {
		max *= 10
	}

	min := max / 10

	if length == 1 {
		min = 0
	}

	nBig := make([]byte, 4)

	if _, err := rand.Read(nBig); err != nil {
		return "", err
	}

	var n uint32
	for _, b := range nBig {
		n = (n << 8) | uint32(b)
	}

	otp := min + int(n)%max

	return fmt.Sprintf("%0*d", length, otp), nil
}
