package ui;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;

public abstract class AbstractUiTemplate extends AbstractUi {

    public void show() {
        // ¸Þ´º Ç¥½Ã
        showMenu();
        // ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
        String inputedString = getInputedString();
        // ÀÔ·ÂµÈ ¹®ÀÚ¿­À» °ËÁõ
        if (isValidNumber(inputedString)) {
            // Ã³¸® ±âµ¿
            execute(NumberUtils.toInt(inputedString));
        }     
    }

    abstract protected void showMenu();

    abstract protected int getMaxMenuNumber();

    abstract protected int getMinMenuNumber();

    abstract protected void execute(int number);

    protected boolean isValidNumber(String str) {
        
        // ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÇ¾ú´ÂÁö?
        if (StringUtils.isBlank(str)) {
            return false;
        // ¼ýÀÚÀÎÁö?
        } else if (!StringUtils.isNumeric(str)) {
            return false;
        }
        // ¼ýÀÚÀÌ¹Ç·Î int·Î º¯È¯
        int number = NumberUtils.toInt(str);
        // ¼ýÀÚ°¡ ¸Þ´º¿¡ Ç¥½ÃµÇ¾î ÀÖ´Â ¹øÈ£ÀÇ ¹üÀ§ÀÎÁö?
        if (getMinMenuNumber() <= number && number <= getMaxMenuNumber()) {
            return true;
        }
        return false;
    }
}
