package myUtil;

public class TypeCheckUtil {

	/**
	 * @param letters 文字数
	 * @return 文字数チェック
	 */
	public static String checkLength(String letters) {
		//String str = letters;
		//String length=String.valueOf(str.length());
		//str.length();
		//System.out.println(str+"is"+String.valueOf(str.length()));
		return String.valueOf(letters.length());
	}

	/**
	 * @param letters 文字引数
	 * @param number 入力文字数
	 * @param restrictNumber 制限文字数
	 * @return
	 */
	public static boolean checkLengthRestrict(String letters, Integer number, Integer restrictNumber) {
		letters.length();
		if (restrictNumber < number) {
			System.out.println("超えてんだよカスが！");
			return false;
		}
		return true;
	}

	/**
	 * 日付チェックのメソッド（うるう年、範囲外チェック）
	 * @param date
	 * @return 日付チェックが有効か無効か
	 */
	public static boolean checkPatternSInot(String date) {

		if (parseDateLength(date) == Enumber.eight
				&& perseStartEndVal(date, Enumber.four, Enumber.eight) == 229
				&& perseStartEndVal(date, Enumber.zero, Enumber.four)
					== Integer.parseInt(yearGet(date))) {
			//return true;
		}
		//
		if (Integer.parseInt(checkLength(date)) == Enumber.eight
				&& perseStartEndVal(date, Enumber.four, Enumber.six) <= Enumber.twelve
				&& perseStartEndVal(date, Enumber.four, Enumber.six) > Enumber.zero
				&& perseStartEndVal(date, Enumber.six, Enumber.eight) > Enumber.zero) {
			System.out.println("sdfsdf");
			if ((perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.one
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.three
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.five
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.seven
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.eight
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.ten
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.twelve)
					&& perseStartEndVal(date, Enumber.six, Enumber.eight) <= Enumber.thertyone) {
				return true;
			} else if (perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.two
					&& perseStartEndVal(date, Enumber.six, Enumber.eight) <= Enumber.twentynine
					&& (perseStartEndVal(date, Enumber.zero, Enumber.four) % 4) == 0) {
				return true;
			} else if (perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.two
					&& perseStartEndVal(date, Enumber.six, Enumber.eight) <= Enumber.twentyeight
					&& (perseStartEndVal(date, Enumber.zero, Enumber.four) % 4) != 0) {
				return true;
			} else if ((perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.four
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.six
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.nine
					|| perseStartEndVal(date, Enumber.four, Enumber.six) == Enumber.eleven)
					&& perseStartEndVal(date, Enumber.six, Enumber.eight) <= Enumber.therty) {
				return true;
			}
		}
		System.out.println("hrugjsfial");
		return false;
	}

	/**
	 * @param date
	 * @param startValue
	 * @param endValue
	 * @return 文字列の部分抽出
	 */
	private static Integer perseStartEndVal(String date, Integer startValue, Integer endValue) {
		String str = date;
		return Integer.parseInt(str.substring(startValue, endValue));
	}

	private static Integer parseDateLength(String date) {
		return Integer.parseInt(checkLength(date));
	}

	/**
	 * @param date
	 * @return うるう年チェック
	 */
	private static String yearGet(String date) {
		String str = date;
		if (checkLength(date) == "8" || (Integer.parseInt(str.substring(0, 4))) % 4 == 0) {
			System.out.println("うるう年です。");
			return str.substring(0, 4);
			//return str;
		} else {
			System.out.println("うるう年ではないです。");
		}
		return String.valueOf(0);
		//return str.substring(0,4);
	}

	/**
	 * @param date
	 * @return 日付形式チェック（文字から数字に変換できる場合はtrue
	 */
	public static boolean checkPattern(String date) {
		try {
			int i = Integer.parseInt(date);
			return true;
		} catch (NumberFormatException e) {
			return false;
		} catch (NullPointerException e) {
			return false;
		}
	}

}