package jp.co.y_net.amm.api;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

import jp.co.y_net.amm.service.Logincheck;
import jp.co.y_net.amm.service.Logincheck.LogincheckResult;

import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;

public class ApiLogincheck extends ApiPage {

    @SpringBean(name = "logincheck")
    private Logincheck logincheck;

    public ApiLogincheck(PageParameters pageParams) {

        /* 主処理 */
        Result result = new Result();

        String loginid = pageParams.get("loginid").toString();
        String cres = pageParams.get("cres").toString();
        String cstr = pageParams.get("cstr").toString();

        if (loginid == null) {
            setResponse(result.err("パラメータ loginid が指定されていません。"));
            return;
        }
        if (cres == null) {
            setResponse(result.err("パラメータ cres が指定されていません。"));
            return;
        }
        if (cstr == null) {
            setResponse(result.err("パラメータ cstr が指定されていません。"));
            return;
        }

        try {
            loginid = URLDecoder.decode(loginid, "UTF-8"); // URLデコード
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }

        /* 2016/02/22 戻り値にuseridを追加 */
        LogincheckResult logincheckResult = logincheck.executeFromApi(loginid, cres, cstr); // 認証実施
        if(0 == logincheckResult.errorCode) { // 認証実施
            
            /* 認証成功 */
            result.value = true;
            result.errorCode = logincheckResult.errorCode;
            result.usrid = logincheckResult.usrid;
        } else {
            
            /* 認証失敗 */
            result.value = false;
            result.errorCode = logincheckResult.errorCode;
            result.rmsg = Logincheck.errorMemo.get(logincheckResult.errorCode);
        }


        /* JSONのレスポンスを設定 */
        setResponse(result);
    }

    /**
     * 処理結果
     * 
     * @author k_inaba
     */
    public static class Result extends ApiResult {
        public boolean value;
        public Integer errorCode;
        public Integer usrid; /* 2016/02/22 戻り値にuseridを追加 */
    }

}
