package jp.mosp.payroll.common.vo;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import jp.mosp.common.MosPVo;
import jp.mosp.common.common.MospException;
import jp.mosp.common.common.MospUtility;
import jp.mosp.common.dto.MosPConfDto;
import jp.mosp.common.utils.DateUtil;
import jp.mosp.payroll.base.Employee;
import jp.mosp.payroll.base.PayrollConst;

public class InsuranceConfSetVo extends MosPVo {
	
	private static final long	serialVersionUID			= 1833548315728482756L;
	
	// URL、CSS
	private static final String	RETURN_URL					= "/jsp/payroll/common/insuranceConfSet.jsp";
	private static final String	EXTRA_JS					= "/pub/payroll/common/js/insuranceConfSet.js";
	private static final String	EXTRA_CSS					= "/pub/payroll/common/css/insuranceConfSet.css";
	
	// 画面サブタイトル
	public final String			SUB_TITLE					= PayrollConst.TTL_SANTEI_GEPPEN_CONF;
	
	// パラメータ名
	public static final String	BTN_SYORI_SELECT			= "idButtonSyori";									// 処理選択ボタン名
	public static final String	BTN_SIHARAI_KISO_NISU		= "idButtonKisoNisu";								// 支払い基礎日数ボタン名
	public static final String	BTN_HOUSYU_GETU_GAKU		= "idButtonGetuGaku";								// 報酬月額ボタン名
	public static final String	BTN_JYOUKEN_SELECT			= "idButtonJyouken";								// 入力条件ボタン名
	public static final String	BTN_KAIGO_KUBUN				= "idButtonKaigoKubun";							// 介護区分ボタン名
																												
	public static final String	PRM_SYOUKYU_TUKI			= "prmSyoukyuTuki";								// 昇(降）給月プルダウン
//	public static final String PRM_CYOUSYU_KAISI					= "prmCyouSyuTuki";			// 徴収開始月プルダウン
	public static final String	PRM_CKR_SANTEI_KISO			= "prmCkrSanteikiso";								// ラジオボタン「算定基礎」選択
	public static final String	PRM_CKR_TUKIGAKU_HENKOU		= "prmCkrTukiGakuHenkou";							// ラジオボタン「月額変更」
	public static final String	PRM_CKR_SHIHARAI_ZENGETU	= "prmCkrShiharaiZenGetu";							// ラジオボタン「前月暦日を使用」選択
	public static final String	PRM_CKR_SHIHARAI_TOUGETU	= "prmCkrShiharaiTouGetu";							// ラジオボタン「当月暦日を使用」選択
	public static final String	PRM_CKR_HOUSYU_ZENGETU		= "prmCkrHousyuZenGetu";							// ラジオボタン「前月データを集計」選択
	public static final String	PRM_CKR_HOUSYU_TOUGETU		= "prmCkrHousyuTouGetu";							// ラジオボタン「当月データを集計」選択
	public static final String	PRM_CKR_JYUNJYO_KCODE		= "prmCkrJyunjyoKcode";							// ラジオボタン「社員順」選択
	public static final String	PRM_CKR_JYUNJYO_BUSHO		= "prmCkrJyunjyoBusho";							// ラジオボタン「所属順」選択
	public static final String	PRM_CKR_JYUNJYO_KENPO		= "prmCkrJyunjyoKenpo";							// ラジオボタン「健保順」選択
	public static final String	PRM_CKR_JYUNJYO_KOUNEN		= "prmCkrJyunjyoKounen";							// ラジオボタン「厚年順」選択
	public static final String	PRM_CKR_KAIGO_KUBUN_AUTO	= "prmCkrKaigoKubunAuto";							// ラジオボタン「対象社員の区分を自動にする」選択
	public static final String	PRM_CKR_KAIGO_KUBUN_MNAL	= "prmCkrKaigoKubunMnal";							// ラジオボタン「対象社員の区分を手動にする」選択
	public static final String	PRM_CKB_KAIGO_KUBUN_CHK		= "prmCkbKaigoKubunChk";							// チェックボックス「介護区分チェックを行う」選択
																												
	// フィールド
//	private int	santeiNen				;			// 算定対象年
//	private int	santeiTuki				;			// 算定対象月
	
	public String				idButtonSyori;																	// 処理選択内容
	public String				idButtonKisoNisu;																// 支払い基礎日数ボタン選択内容
	public String				idButtonGetuGaku;																// 報酬月額ボタン選択内容
	public String				idButtonJyouken;																// 入力条件ボタン選択内容
	public String				idButtonKaigoKubun;															// 介護区分ボタン選択内容
																												
	public String				prmCkbKaigoKubunChk;															// 「介護区分チェックを行う」選択フラグ
																												
	public String				prmSyoukyuTuki;																// 昇(降）給月プルダウン選択内容
	public String				prmCyouSyuTuki;																// 徴収開始月プルダウン選択内容
																												
	public String				syoukyuTukiStr;																// 昇(落)給月（和暦）
	public String				syoukyuTukiStr_ind;															// 昇(落)給月テーブルINDEX文字
	public String				tekiyouNenGetu;																// 適用年月（和暦）	
	public String				chousyuKaisiTuki;																// 徴収開始月（和暦）
	public String				chousyuKaisiTuki_ind;															// 徴収開始月テーブルINDEX文字
																												
	public Date					syoukyuTuki_Date;																// 昇（落）給月（Date型）
	public Date					tekiyouNenGetu_Date;															// 適用年月（Date型）	
	public Date					chousyuKaisiTuki_Date;															// 徴収開始月（Date型）
																												
	// 条件取得用配列
	public String[][]			arySanteiTuki;
	public String[][]			arySanteiTukiKiso			= { { "4", "04月　適用年月:07月" }, { "5", "05月　適用年月:08月" },
		{ "6", "06月　適用年月:09月" }, { "7", "07月　適用年月:10月" }, { "8", "08月　適用年月:11月" }, { "9", "09月　適用年月:12月" },
		{ "10", "10月　適用年月:01月" }, { "11", "11月　適用年月:02月" }, { "12", "12月　適用年月:03月" }, { "1", "01月　適用年月:04月" },
		{ "2", "02月　適用年月:05月" }, { "3", "03月　適用年月:06月" }	};
	
	public String[][]			aryChyouSyuNenGetu;															//徴収年月（和暦）テーブル
	public String[][]			aryEra;																		//和暦年号変換テーブル 
	public String[]				aryKcode;																		//和暦年号変換テーブル 
	public List<Employee>		listEmployee;																	//人事情報リスト
	// 設定テーブル
	public List<MosPConfDto>	listConf;
	

	/**
	 * コンストラクタ
	 */
	public InsuranceConfSetVo() {
		super();
		setRetUrl(RETURN_URL);
		setExtraJs(EXTRA_JS);
		setExtraCss(EXTRA_CSS);
		syoukyuTukiStr_ind = arySanteiTukiKiso[0][0];
		idButtonSyori = ""; // 処理選択内容取得
		idButtonKisoNisu = ""; // 支払い基礎日数ボタン選択内容取得
		idButtonGetuGaku = ""; // 報酬月額ボタン選択内容取得
		idButtonJyouken = ""; // 入力条件ボタン選択内容取得
		idButtonKaigoKubun = ""; // 介護区分ボタン選択内容取得
		prmCkbKaigoKubunChk = ""; //「介護区分チェックを行う」選択
	}
	
	/**
	 * フィールド初期化
	 * @throws MospException 
	 */
	public void initFields() throws MospException {
		Date dateTmp;
		int tmpYear;
		int thisYear = MospUtility.getYear(DateUtil.getSystemDate());
		
		// 本年の徴収月テーブル（7月〜10月）を設定
		aryChyouSyuNenGetu = new String[4][2];
		for (int i = 0; i < 4; i++) {
			tmpYear = (thisYear * 10000) + ((7 + i) * 100) + 1;
			dateTmp = DateUtil.convIntegerDateToDate(tmpYear);
			aryChyouSyuNenGetu[i][0] = String.valueOf(tmpYear);
			aryChyouSyuNenGetu[i][1] = getMonthString(listConf, aryEra, dateTmp);
		}
		chousyuKaisiTuki_ind = aryChyouSyuNenGetu[3][0]; //　徴収テーブルをディフォルト「10月」に設定
	}
	
	/**
	 * パラメータ設定
	 * @param request リクエスト
	 */
	public void setParamsAll(HttpServletRequest request) {
		idButtonSyori = getRadioButtonParam(request.getParameter(BTN_SYORI_SELECT)); // 処理選択内容取得
		idButtonKisoNisu = getRadioButtonParam(request.getParameter(BTN_SIHARAI_KISO_NISU)); // 支払い基礎日数ボタン選択内容取得
		idButtonGetuGaku = getRadioButtonParam(request.getParameter(BTN_HOUSYU_GETU_GAKU)); // 報酬月額ボタン選択内容取得
		idButtonJyouken = getRadioButtonParam(request.getParameter(BTN_JYOUKEN_SELECT)); // 入力条件ボタン選択内容取得
		idButtonKaigoKubun = getRadioButtonParam(request.getParameter(BTN_KAIGO_KUBUN)); // 介護区分ボタン選択内容取得
		prmCkbKaigoKubunChk = getCheckBoxParam(request.getParameter(PRM_CKB_KAIGO_KUBUN_CHK)); //「介護区分チェックを行う」選択
		prmSyoukyuTuki = request.getParameter(PRM_SYOUKYU_TUKI); // 昇(降）給月プルダウン
//		prmCyouSyuTuki			=	request.getParameter(PRM_CYOUSYU_KAISI);							// 昇(降）給月プルダウン
	}
	
	/**
	 * ラジオボタン未取得NULL対応
	 * @param value ラジオボタン選択パラメータ値
	 * @return 変換チェックボックスリクエストパラメータ値
	 */
	public String getRadioButtonParam(String value) {
		if (value == null) {
			return "";
		} else {
			return value;
		}
	}
	
	/**
	 * 和暦日付文字列取得(年月)
	 * @param list 設定マスタDTOリスト
	 * @param aryEra 和暦情報リスト
	 * @param date 日
	 * @return 日付年月文字列
	 * @throws MospException
	 */
	protected String getMonthString(List<MosPConfDto> list, String[][] aryEra, Date date) throws MospException {
		if (date == null || list == null) {
			return "";
		}
		String[] strDate = getJpImperialCal(list, date);
		strDate[0] = getCodeName(strDate[0], aryEra);
		for (int i = 1; i < strDate.length; i++) {
			strDate[i] = strDate[i].length() < 2 ? PayrollConst.SUPPRESS_DATE + strDate[i] : strDate[i];
		}
		return strDate[0] + strDate[1] + PayrollConst.NAM_YEAR + strDate[2] + PayrollConst.NAM_MONTH;
	}
	
	/**
	 * 日付文字列取得(和暦)
	 * @param list 和暦情報リスト
	 * @param date 日
	 * @return 日付文字列
	 * @throws MospException
	 */
	@Override
	protected String getDateString(List<MosPConfDto> list, String[][] aryEra, Date date) throws MospException {
		if (date == null || list == null) {
			return "";
		}
		String[] strDate = getJpImperialCal(list, date);
		strDate[0] = getCodeName(strDate[0], aryEra);
		for (int i = 1; i < strDate.length; i++) {
			strDate[i] = strDate[i].length() < 2 ? PayrollConst.SUPPRESS_DATE + strDate[i] : strDate[i];
		}
		return strDate[0] + strDate[1] + PayrollConst.NAM_YEAR + strDate[2] + PayrollConst.NAM_MONTH + strDate[3]
				+ PayrollConst.NAM_DAY;
	}
	
	public void setSyoukyuTuki(Date setDate) {
		syoukyuTuki_Date = setDate;
	} // Date型昇（降）給年月日設定
	
	public void setSyoukyuTukiJp(String setDate) {
		if (setDate.length() > 3) {
			syoukyuTukiStr = setDate.substring(0, setDate.length() - 3);
		} else {
			syoukyuTukiStr = "";
		}
	}
	
	public void setTekiyouNenGetu(Date setDate) throws MospException { // 適用年月の設定 
		tekiyouNenGetu = getMonthString(listConf, aryEra, setDate);
		tekiyouNenGetu_Date = setDate;
	}
	
	public void setChousyuKaisiTukiStr(Date setDate) throws MospException { // 徴収年月の設定
		chousyuKaisiTuki = getMonthString(listConf, aryEra, setDate);
		chousyuKaisiTuki_Date = setDate;
	}
	
	public String getIdButtonSyori() {
		return idButtonSyori;
	} // 処理選択内容取得
	
	public String getIdButtonKisoNisu() {
		return idButtonKisoNisu;
	} // 支払い基礎日数ボタン選択内容取得
	
	public String getIdButtonGetuGaku() {
		return idButtonGetuGaku;
	} // 報酬月額ボタン選択内容取得
	
	public String getIdButtonJyouken() {
		return idButtonJyouken;
	} // 入力条件ボタン選択内容取得
	
	public String getIdButtonKaigoKubun() {
		return idButtonKaigoKubun;
	} // 介護区分ボタン選択内容取得
	
	public String getPrmCkbKaigoKubunChk() {
		return prmCkbKaigoKubunChk;
	} //「介護区分チェックを行う」選択
	
	public String getSyoukyuTukiStr() {
		return syoukyuTukiStr;
	} // 昇(落)給月取得（和暦）
	
	public String getSyoukyuTukiStrIndx() {
		return syoukyuTukiStr_ind;
	} // 昇(落)給月テーブルインデックス文字取得  
	
	public String getChousyuKaisiTukiStr() {
		return chousyuKaisiTuki;
	} // 徴収開始年月取得
	
	public String getChousyuKaisiTukiStrIndx() {
		return chousyuKaisiTuki_ind;
	} // 徴収開始年月テーブル文字列所得
	
	public String getTekiyouNenGetu() {
		return tekiyouNenGetu;
	}
	
}
