package com.eactive.httpmockserver.common.util;

import java.security.SecureRandom;

public class RandomUtil {

    private RandomUtil() {
        throw new IllegalStateException("Utility class");
    }

    public static int getRandomNum(int startNum, int endNum) {
        int randomNum = 0;

        // 랜덤 객체 생성
        SecureRandom rnd = new SecureRandom();

        do {
            // 종료숫자내에서 랜덤 숫자를 발생시킨다.
            randomNum = rnd.nextInt(endNum + 1);
        } while (randomNum < startNum); // 랜덤 숫자가 시작숫자보다 작을경우 다시 랜덤숫자를 발생시킨다.

        return randomNum;
    }

    /**
     * 문자열 A에서 Z사이의 랜덤 문자열을 구하는 기능을 제공 시작문자열과 종료문자열 사이의 랜덤 문자열을 구하는 기능
     *
     * @param startChr - 첫 문자
     * @param endChr   - 마지막문자
     * @return 랜덤문자
     * @see
     */
    public static String getRandomStr(char startChr, char endChr) {

        int randomInt;
        String randomStr = null;

        // 시작문자열이 종료문자열보가 클경우
        if (startChr > endChr) {
            throw new IllegalArgumentException("Start String: " + startChr + " End String: " + endChr);
        }

        // 랜덤 객체 생성
        SecureRandom rnd = new SecureRandom();

        do {
            // 시작문자 및 종료문자 중에서 랜덤 숫자를 발생시킨다.
            randomInt = rnd.nextInt(endChr + 1);
        } while (randomInt < startChr); // 입력받은 문자 'A'(65)보다 작으면 다시 랜덤 숫자 발생.

        // 랜덤 숫자를 문자로 변환 후 스트링으로 다시 변환
        randomStr = (char) randomInt + "";

        // 랜덤문자열를 리턴
        return randomStr;
    }

}
