/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatCHStampTaxShukeiEdit
 *	ソースファイル名	：JBSbatCHStampTaxShukeiEdit.java
 *	作成者				：富士通　
 *	作成日				：2020年10月15日
 *＜機能概要＞
 *　印紙税集計表編集部品です。
 *＜修正履歴＞
 *	バージョン		修正日		修正者			修正内容
 * v52.00		2020/10/15	GDC)ニール		【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
 * v52.01		2021/02/24	FJ)星野			【IT2-2021-0000012】
 *********************************************************************/
package eo.business.service;

import java.util.Arrays;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHBatNameStkuUtil;
import eo.business.util.file.JBSbatCHLST090;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JCHStringUtil;
import eo.common.util.JPCUtilCommon;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
 * 
 * @author n.alcoseba
 * 
 */
public class JBSbatCHStampTaxShukeiEdit extends JBSbatBusinessService {

	/** 印紙税区分マップ */
	private Map<String, String> stampTaxKbnMap = null;
	
// IT2-2021-0000012対応 20210224 星野 ADD START
	/** ブレイクキー(発送区分＋印紙税区分)配列 昇順ソート済 */
	private String[] keysArray = new String[]{
		 "01"
		,"02"
		,"03"
		,"04"
		,"05"
		,"06"
		,"11"
		,"12"
		,"13"
		,"14"
		,"15"
		,"16"
	};
	/** 印紙税区分配列のインデックス 初期値は0*/
	private int keyIndex = 0;
// IT2-2021-0000012対応 20210224 星野 ADD END
	

	@Override
	public void initial(JBSbatCommonItem commonItem) throws Exception {
		super.setCommonInfo(commonItem);

		//  印紙税区分マップの取得
		JCHBatNameStkuUtil jchBatNameStkuUtil = new JCHBatNameStkuUtil();
		stampTaxKbnMap = jchBatNameStkuUtil.getCdNmMap(commonItem, JZM0171Constant.CD01759);
		
	}

	/**
	 * 
	 * @param inMap
	 * @return JBSbatOutputItem
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception {
		// 出力共通電文を生成
		JBSbatOutputItem outputInItem = new JBSbatOutputItem();

// IT2-2021-0000012対応 20210224 星野 ADD START
		String hassoKbn = inMap.getString(JBSbatCHLST090.HASSO_KBN);
		String stampKbn = inMap.getString(JBSbatCHLST090.STAMP_KBN);
		// 入力ファイルの印紙税区分が設定されている場合、明細行の編集処理と判断し、キー比較判定
		// 小計行や合計行の編集時はキー比較判定はしてはいけない
		if( !JCHStringUtil.isNullBlank(stampKbn) ){
			
			// キー比較
			String inKey = hassoKbn + stampKbn;
			// 入力ファイルの方が大きくなったら、次のコード値を確認
			while(keyIndex < keysArray.length && keysArray[keyIndex].compareTo(inKey) < 0){
				// インデックスを次に進める
				keyIndex++;
				
				if(keyIndex < keysArray.length){
					String nextKey = keysArray[keyIndex];
					
					// 入力のキーよりまだ小さかったら、0円明細を出力して次のコード値へ
					if( nextKey.compareTo(inKey) < 0 ){
						
						JBSbatServiceInterfaceMap outInfoMap = new JBSbatServiceInterfaceMap();
						outInfoMap.set(JBSbatCHLST090.HASSO_KBN, nextKey.substring(0,1));
						outInfoMap.set(JBSbatCHLST090.STAMP_KBN, stampTaxKbnMap.get(nextKey.substring(1,2)));
						outInfoMap.set(JBSbatCHLST090.STAMP_CNT, "0");
						outInfoMap.set(JBSbatCHLST090.STAMP_TAX_AMNT, "0");

						outInfoMap.setOutFlg(true);
						outputInItem.addOutMapList(outInfoMap);
					}
				}
			}
			
			// トレーラレコードだったらここで終わる
			if(inMap.getString(JBSbatCHLST090.HASSO_KBN).equals("9")){
				return outputInItem;
			}
		}
		
		
// IT2-2021-0000012対応 20210224 星野 ADD END
		
		JBSbatServiceInterfaceMap outInfoMap = new JBSbatServiceInterfaceMap();
		outInfoMap.set(JBSbatCHLST090.HASSO_KBN, inMap.getString(JBSbatCHLST090.HASSO_KBN));
		outInfoMap.set(JBSbatCHLST090.STAMP_KBN, stampTaxKbnMap.get(inMap.getString(JBSbatCHLST090.STAMP_KBN)));
		outInfoMap.set(JBSbatCHLST090.STAMP_CNT, JPCUtilCommon.formatNumber(inMap.getString(JBSbatCHLST090.STAMP_CNT)));
		outInfoMap.set(JBSbatCHLST090.STAMP_TAX_AMNT, JPCUtilCommon.formatNumber(inMap.getString(JBSbatCHLST090.STAMP_TAX_AMNT)));

		outInfoMap.setOutFlg(true);
		outputInItem.addOutMapList(outInfoMap);

		return outputInItem;
	}

	@Override
	public void terminal() throws Exception {
	}

}
