package jp.co.y_net.amm.page;

import java.io.Serializable;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.PropertyModel;

public class CommonConfirmPage extends WebPage {
    private static final long serialVersionUID = 1L;
    
    /** 確認メッセージ */
    public String confirmMessage = ""; // 変数名変更禁止
    public String confirmMessageStrong = ""; // 変数名変更禁止
    
    /**
     * コールバックオブジェクト
     */
    public Callback callback;
    public static abstract class Callback implements Serializable {
        abstract void callback(AjaxRequestTarget target);
    }
    
    /**
     * 処理実行オブジェクト
     */
    public Executable executable;
    public static abstract class Executable {
        abstract void execute();
    }
    
    public CommonConfirmPage() {
        
        /* フィードバックパネル */
        final FeedbackPanel fbPanel = new FeedbackPanel("feedback");
        fbPanel.setOutputMarkupId(true);
        add(fbPanel);
        
        Form<Void> form = new Form<Void>("form");
        add(form);
        
        /* 確認メッセージ */
        form.add(new Label("confirmMessage", new PropertyModel<String>(this, "confirmMessage")));
        form.add(new Label("confirmMessageStrong", new PropertyModel<String>(this, "confirmMessageStrong")){
            @Override
            public boolean isVisible() {
                return StringUtils.isEmpty(confirmMessageStrong) == false;
            }
            
        });
        

        /* 実行ボタン */
        form.add(new AjaxButton("btnExecute"){
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                executable.execute(); // executableの実行
                callback.callback(target); // コールバックに通知
                ModalWindow.closeCurrent(target); // 画面を閉じる
            }
            
            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                // 処理なし
            }
        });
        
        /* 戻る/キャンセル ボタン */
        form.add(new AjaxButton("btnBack") {
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                ModalWindow.closeCurrent(target); // 画面を閉じる
            }
            
            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                // 処理なし
            }
        });
    }

}
