package jp.co.y_net.amm.page;

import java.util.List;

import jp.co.y_net.amm.AppSession;
import jp.co.y_net.amm.AppSession.LoginUser;
import jp.co.y_net.amm.common.ResourceReader;
import jp.co.y_net.amm.dao.Inf;
import jp.co.y_net.amm.dao.Usr;

import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.list.PageableListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;

public class InfoListPage extends CommonFrameA {
    private static final long serialVersionUID = 1L;
    
    /*
     * 画面入力値
     */
    // 無し
    
    /*
     * 画面の状態
     */
    private boolean complete = false;
    
    /**
     * ログインチェック定義
     * @see jp.co.y_net.amm.page.AppPage#validateLogin()
     */
    @Override
    public boolean validateLogin() {
        if(AppSession.get().isLogin()) {
            if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) {
                return true;
            }
        }
        return false;
    }
    
    public InfoListPage() {
        
        /* 戻るリンク */
        add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin")));

        /* 新規お知らせ作成リンク */
//        add(new BookmarkablePageLink<Void>("goInfoEntry", InfoEntryPage.class));
        /* 編集画面への遷移 */
        Link<Void> goInfoEntry = new Link<Void>("goInfoEntry"){
            @Override
            public void onClick() {
                PageParameters params = new PageParameters();
//                params.set("infid", inf.getInfid());
                InfoEntryPage infoEntryPage = new InfoEntryPage(params);
                infoEntryPage.setReturnPage(getPage());
                setResponsePage(infoEntryPage);
            }
        };
        add(goInfoEntry);
        
        /* フィードバックメッセージ */
        add(new FeedbackPanel("feedback"));
        
        /* 入力フォーム */
        Form<Void> form  = new Form<Void>("form");
        add(form);
        
        /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */
        form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。
        
        final LoginUser loginUser  = AppSession.get().getLoginUser();
        if(loginUser == null) {
            error("ログイン情報が取得できません。");
            return;
        }
        final Integer loginUserId = loginUser.getUsrid();
        
        if(hasInputError()) return; // ----------エラーがあれば中止
        form.setVisible(true);
        
        /* Form内の設定 ----------------------------------------------------------------------------------------------*/
        /* 完了メッセージ */
        Model<String> resultMessageModel = new Model<String>() {
            @Override
            public String getObject() {
                if(complete) {
                    return "削除しました。";
                }
                return "";
            }
        };
        final Label resutlMessage = new Label("resutlMessage", resultMessageModel);
        form.add(resutlMessage);
        
        
        /* 一覧の設定 ------------------------------------------------------------------------------------------------*/
        
        /* お知らせ領域 */
        // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル
        final IModel<List<Inf>> infModel = new LoadableDetachableModel<List<Inf>>() {
            @Override
            protected List<Inf> load() {
                Inf cnd = new Inf();
                cnd.setStatus(Inf.STATUS_掲載中);
                List<Inf> list = infDao.get(cnd);
                return list;
            }
        };
        final ListView<Inf> listInfo = new PageableListView<Inf>("listInfo", infModel, 20) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(ListItem<Inf> item) {
                final Inf inf = item.getModelObject();

                WebMarkupContainer infoCont = new WebMarkupContainer("infoCont");
                item.add(infoCont);

                /* 編集画面への遷移 */
                Link<Void> link = new Link<Void>("link"){
                    @Override
                    public void onClick() {
                        PageParameters params = new PageParameters();
                        params.set("infid", inf.getInfid());
                        InfoEntryPage infoEntryPage = new InfoEntryPage(params);
                        infoEntryPage.setReturnPage(getPage());
                        setResponsePage(infoEntryPage);
                    }
                };
                link.add(new Label("label", inf.getTitleFormat()));
                infoCont.add(link);

                item.add(new Label("date", inf.getPubdate_Disp()));
                
                item.add(new Button("delete") {
                    @Override
                    public void onSubmit() {
                        inf.setStatus(Inf.STATUS_掲載終了);
                        infDao.update(inf, loginUserId); // 更新処理
                        
                        /* 完了状態へ遷移 */
//                        completeDel = true; 連続削除を考慮し、完了状態へ移行しない
                        
                        info("削除しました。");
                    }
                });
            }
        };
        form.add(listInfo);

    }

//    private List<Infomation> readInfo() {
//        List<Infomation> list = new ArrayList<Infomation>();
//
//        for (int i = 0; i < 3; i++) {
//            Infomation info = new Infomation();
//            info.title = "ああああ" + i + "いいいいいうううううえええええおおおおおかかかかかかききききき";
//            info.date = new Date();
//            list.add(info);
//        }
//        return list;
//    }

    //    @Override
    //    protected boolean needLogin() {
    //        return false;
    //    }
}
