/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKUejbOnuKknKojiMngnAdd
*   ソースファイル名：JKUejbOnuKknKojiMngnAdd.java
*   作成者          ：富士通
*   日付            ：2024年01月17日
*＜機能概要＞
*   ONU交換工事文言追加部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v70.00.00	2024/01/17	FJ)中川		【ANK-4530-00-00】【eo】 HGW導入フォロー対応 １
*
**********************************************************************/

package eo.ejb.common;

import java.io.UnsupportedEncodingException;

import eo.common.constant.JKUStrConst;

/**
 * 工事案件連絡事項に文言を追加するクラス。<p>
 * <BR>
 * @author 富士通
 */
public class JKUejbOnuKknKojiMngnAdd
{
	/**
	 * 工事案件連絡事項に文言を追加します。
	 * @param idoDiv 異動区分
	 * @param svcCd サービスコード
	 * @param kojiakRrkJiko 工事案件連絡事項
	 * @return 工事案件連絡事項
	 * @throws UnsupportedEncodingException 
	 */
	public static String rrkJikoMngnAdd(String idoDiv, String svcCd, String kojiakRrkJiko)
	{
		// 工事案件連絡事項の末尾に追加できる文言のバイト数を算出する
		int addPsbByte = 200;
		try {
			if(kojiakRrkJiko != null && !kojiakRrkJiko.equals(""))
			{
				addPsbByte = 200 - kojiakRrkJiko.getBytes("Shift-JIS").length;
			}
		} catch (UnsupportedEncodingException e) {
		}
		
		// 追加できる文言のバイト数が3バイト未満の場合、処理を終了する
		if(addPsbByte < 3)
		{
			return kojiakRrkJiko;
		}
		
		// 異動区分から追加する文言を特定し、末尾切り捨てを行う
		String addMngn;
		if(JKUStrConst.CD00576_SVC_ADD.equals(idoDiv) && JKUStrConst.CD00130_NET.equals(svcCd))
		{
			// サービス追加：ネット起因
			addMngn = addMngnCut(JKUStrConst.IDOOPTY_MNGN_SVC_ADD_NET, addPsbByte);
		}
		else if(JKUStrConst.CD00576_SVC_ADD.equals(idoDiv) && JKUStrConst.CD00130_TEL.equals(svcCd))
		{
			// サービス追加：電話起因
			addMngn = addMngnCut(JKUStrConst.IDOOPTY_MNGN_SVC_ADD_TEL, addPsbByte);
		}
		else if(JKUStrConst.CD00576_TELNO_ADD.equals(idoDiv))
		{
			// 電話番号追加
			addMngn = addMngnCut(JKUStrConst.IDOOPTY_MNGN_TELNO_ADD, addPsbByte);
		}
		else if(JKUStrConst.CD00576_KIKI_KEI_CHGE.equals(idoDiv))
		{
			// 機器契約変更
			addMngn = addMngnCut(JKUStrConst.IDOOPTY_MNGN_KK_KEI_CHG, addPsbByte);
		}
		else
		{
			// 上記ケース以外の場合、処理を終了する
			return kojiakRrkJiko;
		}
		
		// 工事案件連絡事項がnullの場合、""に置き換える
		if(kojiakRrkJiko == null)
		{
			kojiakRrkJiko = "";
		}
		
		// 工事案件連絡事項の末尾に文言を追加して返却する
		return kojiakRrkJiko + addMngn;
	}

	/**
	 * 工事案件連絡事項に追加できない分の文言を末尾から切り捨てます。
	 * @param addMngn 追加文言
	 * @param addPsbByte 追加可能バイト数
	 * @return 追加文言
	 */
	public static String addMngnCut(String addMngn, int addPsbByte)
	{
		String ret = "";
		
		// 工事案件連絡事項がnullまたは空白以外の場合、追加文言の頭に区切り文字を追加する
		if(addPsbByte != 200)
		{
			addMngn = JKUStrConst.HANKAKU_SPACE + addMngn;
		}
		
		try
		{
			int textByteCnt = 0;
			for (int i = 0; i < addMngn.length(); i++)
			{
				String tmpText = addMngn.substring(i, i + 1);
				byte[] tmpTextByte = tmpText.getBytes("Shift-Jis");
				if (textByteCnt + tmpTextByte.length > addPsbByte)
				{
					return ret;
				}
				else
				{
					ret = ret + tmpText;
					textByteCnt = textByteCnt + tmpTextByte.length;
				}
			}
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
		
		return ret;
	}
}
