package com.udapsoft.waf.common.util;

public class IDEnDecoder {

	private IDEnDecoder() {
		super();
	}

	/**
	 * @param str
	 * @return
	 */
	public static String encode(String str) {
		IDEnDecoder endecoder = new IDEnDecoder();
		return endecoder.encodeStr(str);
	}

	/**
	 * @param str
	 * @return
	 */
	public static String decode(String str) {
		IDEnDecoder endecoder = new IDEnDecoder();
		return endecoder.decodeStr(str);
	}

	/**
	 * @param str
	 * @return
	 */
	private String encodeStr(String str) {
		try {
			String o_str = str;
			String o_str2 = "";
			if (o_str.length() < 10) {
				o_str2 = "0" + o_str.length() + o_str;
			} else if (o_str.length() < 100) {
				o_str2 = o_str.length() + o_str;
			}

			String t_str = "";
			for (int i = 1; i < o_str2.length(); i++) {

				String s = "";
				if (i == 1) { // 원문자 자리수 체크 자리는 2자리
					s = o_str2.substring(0, i + 1);
				} else {
					s = o_str2.substring(i, i + 1);
				}

				// 구분자 넣기
				int num = getNumber();
				s = s + num;
				for (int j = 0; j < num; j++) {
					s = s + getChar();
				}

				// 구분자를 사이에 넣음
				t_str = t_str + s;
			}
			return t_str;
		} catch (Exception e) {
			return "";
		}
	}

	/**
	 * @param t_str
	 * @return
	 */
	private String decodeStr(String t_str) {
		try {
			String o_str = "";
			int check_key = Integer.parseInt(t_str.substring(0, 2));
			t_str = t_str.substring(2, t_str.length());
			for (int i = 0; i < check_key; i++) {
				int check_num = Integer.parseInt(t_str.substring(0, 1));
				t_str = t_str.substring(check_num + 1, t_str.length());

				o_str = o_str + t_str.substring(0, 1);
				t_str = t_str.substring(1, t_str.length());
			}

			if (o_str.length() == check_key) {
				return o_str;
			}
			return "";
		} catch (Exception e) {
			return "";
		}
	}

	static char[] ints = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };

	private int getNumber() {
		return Integer.parseInt((ints[(int) (Math.random() * 10)]) + "");
	}

	static char[] chars = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
			'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
			'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
			'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
			'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

	private char getChar() {
		return chars[(int) (Math.random() * 62)];
	}
}
