package itn.let.kakao.kakaoComm;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.annotation.Resource;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.util.StringUtil;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
import itn.let.module.base.PriceAndPoint;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.MberManageVO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class KakaoSendUtil {

	@Autowired
	KakaoApiJsonSave kakaoApiJsonSave;
	
	@Resource(name = "MjonMsgDataService")
	private MjonMsgDataService mjonMsgDataService;
	
	@Autowired
	KakaoApiTemplate kakaoApiTemplate;

	@Autowired
	private PriceAndPoint priceAndPoint;

	@Autowired
	private MjonCommon mjonCommon;
	
	// 클래스 수준에서 정적 Pattern 정의 (성능 최적화)
	private static final Pattern REPLACEMENT_PATTERN = Pattern.compile("#\\{[^}]+\\}");

	private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

	// 단문 메세지 타입
	public static final String SHORT_MSG_TYPE = "SMS";
	// 장문 메세지 타입
	public static final String LONG_MSG_TYPE = "MMS";
	
	/**
	 * @methodName	: populateSendLists _advc
	 * @author		: 이호영
	 * @date		: 2025. 3. 7.
	 * @description	: 기존 kakaoSendPrice 개선
	 * @return : KakaoVO
	 * @param kakaoVO
	 * @param statusResponse
	 * @return
	 * @throws Exception
	 * 
	 */
	public List<KakaoSendAdvcVO> populateSendLists(KakaoVO kakaoVO, boolean isNotified, StatusResponse statusResponse) throws Exception {
		
		//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
//		String befCash = kakaoVO.getBefCash();
		

		
		List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
		Calendar calendar = setupBaseDate(kakaoVO, isNotified);

		
		
		KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
		String templateContent = templateDetail.getTemplateContent(); // 알림톡 템플릿
		kakaoVO.setTemplateContent(templateContent);
		String templateTitle = templateDetail.getTemplateTitle();
		
		
//		log.info(" + templateDetail :: [{}]", templateDetail);
//		templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
		
		Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent);
		Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle);
		Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList());

		/** @jsonStr 필요유무 */
		boolean hasTitleOrButtons = StringUtils.isNotEmpty(templateTitle)  
				|| CollectionUtils.isNotEmpty(templateDetail.getButtonList());
		
		/** @jsonStr 반복유무 */
		boolean needsJsonReplacement = hasTitleReplacement || hasButtonReplacement;
		String sharedJsonStr = null;

		String subMsgTxt = kakaoVO.getSubMsgTxt(); // 실패 대체 문자
		
		// 시스템 기본 단가 정보 불러오기
		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
		// 사용자 개인 단가 정보 불러오기
		MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
		
		
		

		/** @MSGID KEY값 */
		List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size());
//		for (int i = 0; i < kakaoSendAdvcListVO.size(); i++) {
//			kakaoSendAdvcListVO.get(i).setMsgId(idList.get(i));
//			kakaoSendAdvcListVO.get(i).setBizJsonName(idList.get(i));
//		}
		
		
		
		// 분할 건수 카운터
		int counter = 0;  
/** @Map에 총 갯수가 수신자 갯수와 동일함 */
		List<Map<String, String>> varList = kakaoVO.getVarListMap();
		for (int i = 0; i < varList.size(); i++) {
			//		for(Map<String, String> variables : kakaoVO.getVarListMap()) {
			// 치환 데이터
			Map<String, String> variables = varList.get(i);
			log.info("");
			
/** @공통 기본값 */		
			KakaoSendAdvcVO sendVO = createSendVO(kakaoVO);
			String msgId = idList.get(i);
			sendVO.setMsgId(msgId);

			// step1
			// Step 1-1: 값 치환 및 수신번호 셋팅
			// Step 1-2: 수신자 정보 설정 (callToList는 항상 설정).
			if (variables.containsKey("callToList")) {
				sendVO.setCallTo(variables.get("callToList"));
				variables.remove("callToList"); // 사용 후 제거.
			}

/** @Step1-3: 템플릿 치환데이터 설정 */		
			String templateContentTemp = templateContent;
			String templateTitleTemp = templateTitle;
			if (hasContentReplacement) {
				templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables);
				if(hasTitleReplacement) {
					templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables);
				}
			}
/** @버튼 치환 */			// 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정
			List<KakaoButtonVO> buttonList = templateDetail.getButtonList();
			if(hasButtonReplacement) {
				buttonList = replaceButtonLinks(buttonList, variables);
			}
			sendVO.setButtonList(buttonList);
			
			sendVO.setTemplateTitle(templateTitleTemp);
			sendVO.setTemplateContent(templateContentTemp);


			String subMsgTxtTemp = subMsgTxt;
			// Step 1-4: 실패 대체 문자 치환데이터 설정
			if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
				if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
					subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables);
				}
				sendVO.setSubMsgTxt(subMsgTxtTemp);// 실패 
			}
			sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); 
			
			
			/*
						log.info("kakaoSendAdvcVO Details: [callTo={}\n, templateContent=\n{}\n, subMsgTxt=\n{}]\n\n\n\n",
								kakaoSendAdvcVO.getCallTo(),
								kakaoSendAdvcVO.getTemplateContent(),
								kakaoSendAdvcVO.getSubMsgTxt()
								);
			*/

			// Step1 END

			
// step3
// 바이트 수 체크 및 금액설정
			

			// 유효한 단가 계산
			float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
			float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
			float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
			
			
			String shortPStr = Float.toString(shortPrice);
			String mmsPStr = Float.toString(longPrice);
			String kakaoAtPStr = Float.toString(kakaoAtPrice);
			
			// 공통 가격 설정
			sendVO.setSmsPrice(shortPStr);
			sendVO.setMmsPrice(mmsPStr);
			sendVO.setKakaoAtPrice(kakaoAtPStr);
			
			
			if("Y".equals(kakaoVO.getSubMsgSendYn())) {
				int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt());
				String sendType = getMsgType(smsTxtByte);
				sendVO.setSubMsgType(sendType);

				if ("INVALID".equals(sendType)) {
					statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");return kakaoSendAdvcListVO;
				}
	
				boolean isMms = "MMS".equals(sendType);
				sendVO.setEachPrice(isMms ? mmsPStr : shortPStr);
				
				
			} else {
				sendVO.setEachPrice(kakaoAtPStr);
			}
			
			
			
			// step4
			// 예약 시간 설정 및 분할 데이터 설정
			if ("Y".equalsIgnoreCase(kakaoVO.getReserveYn())  
				&& "Y".equalsIgnoreCase(kakaoVO.getDivideChk())  
				&& counter == Integer.parseInt(kakaoVO.getDivideCnt())) 
			{
				counter = 0;
				calendar.add(Calendar.MINUTE, Integer.parseInt(kakaoVO.getDivideTime()));
			}
			counter++;
			// 즉시 발송인경우 현재 시간 
			// 예약인 경우 위에 설정한 시간 입력
			sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime())); 
			
			
			
/** @step5 전송 메세지 설정 json파일 만들기*/
			// 타이틀과 버튼이 있고
			if(hasTitleOrButtons) {
				// 버튼과 타이틀에 치환데이터가 있으면 json String을 계속 생성
				if(needsJsonReplacement) {
					sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail);
					sendVO.setBizJsonName(msgId);
					sendVO.setJsonStr(sharedJsonStr);
				} else if (StringUtils.isEmpty(sharedJsonStr)) {
					// 치환 데이터가 없고 아직 생성되지 않았으면 한 번만 생성
					sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail);
					sendVO.setBizJsonName(idList.get(0));
					sendVO.setJsonStr(sharedJsonStr);
				}else {
					sendVO.setBizJsonName(idList.get(0));
				}
				
			}
			log.info(" sendVO :: [{}]", sendVO);
			kakaoSendAdvcListVO.add(sendVO);
		}
		
		
		return kakaoSendAdvcListVO;
	}
	
	private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isNotified) throws ParseException {
		// 예약 시간 기본값 설정
		Date now = new Date();
		// ReqDate가 비어 있으면 현재 시간으로 설정, 그렇지 않으면 ReqDate로 설정
		// 화면에서 예약문자면 예약시간을 regDate로 설정한다.
		Date baseDate;
		if (StringUtils.isEmpty(kakaoVO.getReqDate())) {
			kakaoVO.setReqDate(DATE_FORMATTER.format(now));  // ReqDate에 현재 시간 설정
		    baseDate = now;
		} else {
		    baseDate = DATE_FORMATTER.parse(kakaoVO.getReqDate()); // ReqDate를 baseDate로 설정
		}
		
		// 시간 성정
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(baseDate);  // calendar에 baseDate 설정
		
		// 지연 여부 처리
		// 알림톡 스미싱의심 + 공휴일알림 조건이 맞으면 30분 delay
		if ( "Y".equalsIgnoreCase(kakaoVO.getAtSmishingYn())
				&& isNotified) {
			calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
		}
		return calendar;
	}

	/**
	 * @methodName	: createSendVO 
	 * @author		: 이호영
	 * @date		: 2025. 3. 19.
	 * @description	:  populateSendLists 반복에 필요한 공통생성 부분
	 * @return : KakaoSendAdvcVO
	 * @param kakaoVO
	 * @return
	 * 
	 */
	private KakaoSendAdvcVO createSendVO(KakaoVO kakaoVO) {
		KakaoSendAdvcVO sendVO = new KakaoSendAdvcVO();
		sendVO.setMsgType("8");
		sendVO.setSenderKey(kakaoVO.getSenderKey());
		sendVO.setTemplateCode(kakaoVO.getTemplateCode());
		sendVO.setUserId(kakaoVO.getUserId());
		sendVO.setCallFrom(kakaoVO.getCallFrom());
		sendVO.setAgentCode("04");
		return sendVO;
	}
	
	private List<KakaoButtonVO> replaceButtonLinks(List<KakaoButtonVO> buttonList,
			Map<String, String> variables) {

		if (buttonList != null) {
			for (KakaoButtonVO button : buttonList) {
				// 각 링크 필드에 대해 치환 수행
				if (button.getLinkAnd() != null) {
					button.setLinkAnd(mjonCommon.ATReplaceTemplateVariables(button.getLinkAnd(), variables));
				}
				if (button.getLinkIos() != null) {
					button.setLinkIos(mjonCommon.ATReplaceTemplateVariables(button.getLinkIos(), variables));
				}
				if (button.getLinkMo() != null) {
					button.setLinkMo(mjonCommon.ATReplaceTemplateVariables(button.getLinkMo(), variables));
				}
				if (button.getLinkPc() != null) {
					button.setLinkPc(mjonCommon.ATReplaceTemplateVariables(button.getLinkPc(), variables));
				}
			}
			// 치환된 버튼 리스트를 sendVO에 반영
//			sendVO.setButtonList(buttonList); // KakaoSendAdvcVO에 setButtonList가 있다고 가정
		}
		
		return buttonList;
	}

	/**
	 * 버튼 리스트에 치환 패턴(#{...})이 있는지 확인합니다.
	 * @param buttonList 버튼 리스트 (null 가능)
	 * @return 치환 패턴이 있으면 true, 없으면 false
	 */
	private boolean needsButtonReplacement(List<KakaoButtonVO> buttonList) {
		if (buttonList == null) {
			return false;
		}
		return buttonList.stream().anyMatch(button -> 
			replBooleanStrChecker(button.getLinkAnd()) ||
			replBooleanStrChecker(button.getLinkIos()) ||
			replBooleanStrChecker(button.getLinkMo()) ||
			replBooleanStrChecker(button.getLinkPc())
		);
	}

	/**
	 * 입력 문자열에 치환 패턴(#{...})이 있는지 확인합니다.
	 * @param input 확인할 문자열 (null 가능)
	 * @return 치환 패턴이 있으면 true, 없으면 false
	 */
	private boolean replBooleanStrChecker(String input) {
		// #{...} 패턴을 확인하는 정규 표현식
		if (input == null) {
			return false;
		}
		Matcher matcher = REPLACEMENT_PATTERN.matcher(input);
		return matcher.find();
	}


	public Float getValidPrice(Float personalPrice, Float defaultPrice) {
		return (personalPrice != null && personalPrice > 0) ? personalPrice : defaultPrice;
	}


	/**
	 * @methodName	: getMsgType 
	 * @author		: 이호영
	 * @date		: 2025. 3. 12.
	 * @description	: 메세지 타입 구하기
	 * @return : String
	 * @param smsTxtByte
	 * @return
	 * 
	 */
	private String getMsgType(int smsTxtByte) {
		// TODO Auto-generated method stub

		String msgType = SHORT_MSG_TYPE;

		// 1. 2000 Byte 초과는 에러 처리
		if (smsTxtByte > 2000) {
			return "INVALID";
		}

		// 2. 문자 길이에 따라 메시지 타입 설정 (90 Byte 초과는 장문)
		if (smsTxtByte > 90) {
			msgType = LONG_MSG_TYPE;
		}
		
		return msgType;
	}



	
	
	
	/**
	* @Method Name : kakaoSendPrice
	* @작성일 : 2023. 2. 14.
	* @작성자 :  WYH
	* @Method 설명 : 카카오 전송 가격 설정
	*/
	public KakaoVO kakaoSendPrice(KakaoVO kakaoVO) throws Exception {
		
		System.out.println(" :: kakaoSendPrice :: ");
		
		//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
//		String befCash = kakaoVO.getBefCash();
		
		MjonMsgVO mjonMsgVO = new MjonMsgVO();
		mjonMsgVO.setUserId(kakaoVO.getUserId());
		String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
		String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
		
		//1.시스템 기본 단가 정보 불러오기
		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
		
		//2.사용자 개인 단가 정보 불러오기
		MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
		Float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
		
		/** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */
		//대체문자 발송 여부 확인
		System.out.println(" :: kakaoVO.getSubMsgSendYn() :: "+ kakaoVO.getSubMsgSendYn());
		if(kakaoVO.getSubMsgSendYn().equals("Y")) {
			
			
			String charset = "euc-kr"; 											//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
			int callToCnt = kakaoVO.getCallToList().length;
			String sendType = "";
			
			for(int count =0; count < callToCnt; count++) {
				String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
				if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
					tempSubMagTxt = kakaoSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
				}
				int bytes = tempSubMagTxt.getBytes(charset).length;
				
				if(bytes < 2000) {
					if(bytes > 90) {
						sendType = "MMS";
						break;
					}else {
						sendType = "SMS";
					}
				}else {
					kakaoVO.setResultCode("2000");
					return kakaoVO;
				}
			}
			
			if(sendType.equals("MMS")) {
				//협의 단가가 없으면 시스템 단가로 지정
				if(mberManageVO.getLongPrice() < 1) {
					kakaoAtPrice = sysJoinSetVO.getLongPrice();
					
					kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
					kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
					kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
				}else {
					kakaoAtPrice = mberManageVO.getLongPrice();
					
					kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
					kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
					
					if(mberManageVO.getKakaoAtPrice() < 1) {
						kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
					}else {
						kakaoVO.setKakaoAtPrice(mberManageVO.getKakaoAtPrice());
					}
				}
			}else {
				//협의 단가가 없으면 시스템 단가로 지정
				if(mberManageVO.getShortPrice() < 1) {
					kakaoAtPrice = sysJoinSetVO.getShortPrice();
					
					kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
					kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
					kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
				}else {
					kakaoAtPrice = mberManageVO.getShortPrice();
					
					kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
					kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
					if(mberManageVO.getKakaoAtPrice() < 1) {
						kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
					}else {
						kakaoVO.setKakaoAtPrice(mberManageVO.getKakaoAtPrice());
					}
				}
			}
		}else {
			if(kakaoAtPrice < 1) { //협의 단가가 없으면 시스템 단가로 지정
				kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice();
				
				kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
				kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
				kakaoVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
			}else {
				kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
				kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
				kakaoVO.setKakaoAtPrice(mberManageVO.getKakaoAtPrice());
			}
		}
		
		/** 전송인원 확인*/
		int totCallCnt = kakaoVO.getCallToList().length;
		Float kakaoTotPrice = totCallCnt * kakaoAtPrice; // 총결제 금액  = 총 전송수량 * 카카오 알림톡 단가
		String totPrice = kakaoTotPrice.toString();
		System.out.println("@@@@@@@   : "+kakaoTotPrice  +" =  "+totCallCnt+"  *  "+kakaoAtPrice);
		
		kakaoVO.setEachPrice(kakaoAtPrice.toString());
		kakaoVO.setBefCash(userMoney); // 고객 충전금액
		kakaoVO.setBefPoint(userPoint); // 고객 충전 포인트
		kakaoVO.setTotPrice(totPrice); // 총 카카오 전송 금액
		
		return kakaoVO;
	}
	
	
	/**
	* @Method Name : kakaoFTSendPrice
	* @작성일 : 2024. 1. 17.
	* @작성자 :  WYH
	* @Method 설명 : 카카오 친구톡 전송 가격 설정
	*/
	public KakaoVO kakaoFTSendPrice(KakaoVO kakaoVO) throws Exception {
		
		//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
		String befCash = kakaoVO.getBefCash();
		
		//VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴
		if("".equals(befCash) || befCash == null) {
			
		}
		MjonMsgVO mjonMsgVO = new MjonMsgVO();
		mjonMsgVO.setUserId(kakaoVO.getUserId());
		String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
		String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
		
		//1.시스템 기본 단가 정보 불러오기
		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
		
		//2.사용자 개인 단가 정보 불러오기
		MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
		Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
		
		/** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */
		//대체문자 발송 여부 확인
		if(kakaoVO.getSubMsgSendYn().equals("Y")) {
			
			
			String charset = "euc-kr"; 											//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
			int callToCnt = kakaoVO.getCallToList().length;
			String sendType = "";
			
			for(int count =0; count < callToCnt; count++) {
				String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
				if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
					tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
				}
				int bytes = tempSubMagTxt.getBytes(charset).length;
				
				if(bytes < 2000) {
					if(bytes > 90) {
						sendType = "MMS";
						break;
					}else {
						sendType = "SMS";
					}
				}else {
					kakaoVO.setResultCode("2000");
					return kakaoVO;
				}
			}
			
			if(sendType.equals("MMS")) {
				//협의 단가가 없으면 시스템 단가로 지정
				if(mberManageVO.getLongPrice() < 1) {
					kakaoFtPrice = sysJoinSetVO.getLongPrice();
					
					kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
					kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
					kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
				}else {
					kakaoFtPrice = mberManageVO.getLongPrice();
					
					kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
					kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
					
					if(mberManageVO.getKakaoFtPrice() < 1) {
						kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
					}else {
						kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
					}
				}
			}else {
				//협의 단가가 없으면 시스템 단가로 지정
				if(mberManageVO.getShortPrice() < 1) {
					kakaoFtPrice = sysJoinSetVO.getShortPrice();
					
					kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
					kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
					kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
				}else {
					kakaoFtPrice = mberManageVO.getShortPrice();
					
					kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
					kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
					
					if(mberManageVO.getKakaoFtPrice() < 1) {
						kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
					}else {
						kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
					}
				}
			}
		}else {
			
			if(kakaoFtPrice < 1) { //협의 단가가 없으면 시스템 단가로 지정
				kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
				
				kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
				kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
				kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
			}else {
				kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
				kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
				kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
			}
		}
		
		/** 전송인원 확인*/
		int totCallCnt = kakaoVO.getCallToList().length;
		Float kakaoTotPrice = totCallCnt * kakaoFtPrice; // 총결제 금액  = 총 전송수량 * 카카오 친구톡 단가
		String totPrice = kakaoTotPrice.toString();
		System.out.println("@@@@@@@   : "+kakaoTotPrice  +" =  "+totCallCnt+"  *  "+kakaoFtPrice);
		
		kakaoVO.setEachPrice(kakaoFtPrice.toString());
		kakaoVO.setBefCash(userMoney); // 고객 충전금액
		kakaoVO.setBefPoint(userPoint); // 고객 충전 포인트
		kakaoVO.setTotPrice(totPrice); // 총 카카오 전송 금액
		
		return kakaoVO;
	}
	
	
	/** 
	 * @methodName	: selectSendPriceOfKakaoAtAndSmsAndMms 
	 * @author		: 이호영
	 * @date		: 2023.03.02 
	 * @description	: 알림톡 / sms / mms 가격 불러오기
	 * @param String userID
	 * @return MberManageVO
	 * @throws Exception 
	 */
	public MberManageVO selectSendPriceOfKakaoAtAndSmsAndMms(String userId) throws Exception {

		//1.시스템 기본 단가 정보 불러오기
		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();

		//2.사용자 개인 단가 정보 불러오기
		MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);

		// kakao 단가
		// 사용자 개인 단가가 없으면 시스템 단가로
		if(mberManageVO.getKakaoAtPrice() == 0.0f)
			mberManageVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
		
		//카카오 친구톡 개인 단가가 없는 경우 시스템 단가로
		if(mberManageVO.getKakaoFtPrice() == 0.0f)
			mberManageVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
		
		
		// SMS 인경우
		// 사용자 개인 단가가 없으면 시스템 단가로
		if(mberManageVO.getShortPrice() == 0.0f)
			mberManageVO.setShortPrice(sysJoinSetVO.getShortPrice());
		
//		// MMS 인경우
		// 사용자 개인 단가가 없으면 시스템 단가로
		if(mberManageVO.getLongPrice() == 0.0f)
			mberManageVO.setLongPrice(sysJoinSetVO.getLongPrice());
		

		return mberManageVO;
	}
	
	
	
	/**
	* @Method Name : kakaoSendMsg
	* @작성일 : 2023. 2. 14.
	* @작성자 :  WYH
	* @Method 설명 : 카카오톡 전송 메세지 설정
	*/
	public KakaoVO kakaoSendMsg(KakaoVO kakaoVO) throws Exception {
			List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>();
			//전체 받는사람 수량만큼 반복 확인
			int callToCnt = kakaoVO.getCallToList().length;	
		try {
			for(int count =0; count < callToCnt; count++) {
				
				KakaoVO setSendMsgVO = new KakaoVO();
				
				setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
				// 카카오 전송내용 설정
				// 변환문자 포함(Y), 미포함(N)
				if(kakaoVO.getTxtReplYn().equals("Y")) {
					
					String templateContent = kakaoSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
					setSendMsgVO.setTemplateContent(templateContent);
					
					if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")) {
						
						String title = kakaoSubMagTxtRepl(kakaoVO.getTemplateTitle(), kakaoVO, count);
						String subTitle = kakaoVO.getTemplateSubtitle();
//						title = title +"§§"+ subTitle;
						setSendMsgVO.setTemplateEmphasizeType(kakaoVO.getTemplateEmphasizeType());
						setSendMsgVO.setTemplateTitle(title);
					}
					
				}else {
					
					if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")) {
						
						String title = kakaoSubMagTxtRepl(kakaoVO.getTemplateTitle(), kakaoVO, count);
						String subTitle = kakaoVO.getTemplateSubtitle();
//						title = title +"§§"+ subTitle;
						setSendMsgVO.setTemplateEmphasizeType(kakaoVO.getTemplateEmphasizeType());
						setSendMsgVO.setTemplateTitle(title);
					}
					
					// 템플릿 내용 설정
					setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent());
				}
				
				//대체문자 포함(Y), 미포함(N)
				if(kakaoVO.getSubMsgSendYn().equals("Y")) {
					
					String charset = "euc-kr";	//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
					
					String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
					kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt);
					if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
						tempSubMagTxt = kakaoSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
					}
					System.out.println("@@  대체문자내용 : " + tempSubMagTxt);
					setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
					
					int FrBytes = tempSubMagTxt.getBytes(charset).length;
					System.out.println("@@  대체문자길이 : " + FrBytes);
					//메세지 길이가 90Byte가 초과시 MMS
					if(FrBytes > 90) {
						setSendMsgVO.setSubMsgType("MMS");
					}else {// 아니면 SMS
						setSendMsgVO.setSubMsgType("SMS");
					}
					
					System.out.println("@@  대체문자타입 : " + setSendMsgVO.getSubMsgType());
				}
				
				if(kakaoVO.getBizJsonYn().equals("Y")) {
					kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
					
					String[] varValInfo = null;
					if( kakaoVO.getVarValList().size() != 0) {
						varValInfo = kakaoVO.getVarValList().get(count);
					}
					String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, varValInfo);
					setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
				}
				
				kakaoSendList.add(setSendMsgVO);
			}
			kakaoVO.setKakaoSendList(kakaoSendList);
			
		} catch (Exception e) {
			System.out.println(e.toString());
			e.printStackTrace();
		}
		
		return kakaoVO;
	}
	
	/**
	 * @methodName	: kakaoSendMsg_advc 
	 * @author		: 이호영
	 * @date		: 2025. 3. 13.
	 * @description	: kakaoSendMsg 개선
	 * @return : KakaoVO
	 * @param kakaoVO
	 * @return
	 * @throws Exception
	 * 
	 */
	public KakaoVO kakaoSendMsg_advc(KakaoVO kakaoVO) throws Exception {
		List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>();
		//전체 받는사람 수량만큼 반복 확인
		int callToCnt = kakaoVO.getCallToList().length;	
		try {
			for(int count =0; count < callToCnt; count++) {
				
				KakaoVO setSendMsgVO = new KakaoVO();
				
				setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
				// 카카오 전송내용 설정
				// 변환문자 포함(Y), 미포함(N)
				if(kakaoVO.getTxtReplYn().equals("Y")) {
					
					String templateContent = kakaoSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
					setSendMsgVO.setTemplateContent(templateContent);
					
					if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")) {
						
						String title = kakaoSubMagTxtRepl(kakaoVO.getTemplateTitle(), kakaoVO, count);
						String subTitle = kakaoVO.getTemplateSubtitle();
//						title = title +"§§"+ subTitle;
						setSendMsgVO.setTemplateEmphasizeType(kakaoVO.getTemplateEmphasizeType());
						setSendMsgVO.setTemplateTitle(title);
					}
					
				}else {
					
					if(kakaoVO.getTemplateEmphasizeType().equals("TEXT")) {
						
						String title = kakaoSubMagTxtRepl(kakaoVO.getTemplateTitle(), kakaoVO, count);
						String subTitle = kakaoVO.getTemplateSubtitle();
//						title = title +"§§"+ subTitle;
						setSendMsgVO.setTemplateEmphasizeType(kakaoVO.getTemplateEmphasizeType());
						setSendMsgVO.setTemplateTitle(title);
					}
					
					// 템플릿 내용 설정
					setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent());
				}
				
				//대체문자 포함(Y), 미포함(N)
				if(kakaoVO.getSubMsgSendYn().equals("Y")) {
					
					String charset = "euc-kr";	//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
					
					String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
					kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt);
					if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
						tempSubMagTxt = kakaoSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
					}
					System.out.println("@@  대체문자내용 : " + tempSubMagTxt);
					setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
					
					int FrBytes = tempSubMagTxt.getBytes(charset).length;
					System.out.println("@@  대체문자길이 : " + FrBytes);
					//메세지 길이가 90Byte가 초과시 MMS
					if(FrBytes > 90) {
						setSendMsgVO.setSubMsgType("MMS");
					}else {// 아니면 SMS
						setSendMsgVO.setSubMsgType("SMS");
					}
					
					System.out.println("@@  대체문자타입 : " + setSendMsgVO.getSubMsgType());
				}
				
				if(kakaoVO.getBizJsonYn().equals("Y")) {
					kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
					
					String[] varValInfo = null;
					if( kakaoVO.getVarValList().size() != 0) {
						varValInfo = kakaoVO.getVarValList().get(count);
					}
					String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, varValInfo);
//					String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave_advc(kakaoVO, varValInfo);
//					String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count));
					setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
				}
				
				kakaoSendList.add(setSendMsgVO);
			}
			kakaoVO.setKakaoSendList(kakaoSendList);
			
		} catch (Exception e) {
			System.out.println(e.toString());
			e.printStackTrace();
		}
		
		return kakaoVO;
	}
	
	
	/**
	* @Method Name : kakaoFTSendMsg
	* @작성일 : 2024. 1. 17.
	* @작성자 :  우영두
	* @Method 설명 : 카카오 친톡 전송 메세지 설정
	*/
	public KakaoVO kakaoFTSendMsg(KakaoVO kakaoVO) throws Exception {
			List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>();
			//전체 받는사람 수량만큼 반복 확인
			int callToCnt = kakaoVO.getCallToList().length;	
		try {
			for(int count =0; count < callToCnt; count++) {
				
				KakaoVO setSendMsgVO = new KakaoVO();
				
				setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
				// 카카오 전송내용 설정
				// 변환문자 포함(Y), 미포함(N)
				if(kakaoVO.getTxtReplYn().equals("Y")) {
					
					String templateContent = kakaoFTSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
					setSendMsgVO.setTemplateContent(templateContent);
					
				}else {
					
					// 템플릿 내용 설정
					setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent());
				}
				
				//대체문자 포함(Y), 미포함(N)
				if(kakaoVO.getSubMsgSendYn().equals("Y")) {
					
					String charset = "euc-kr";	//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
					
					String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
					kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt);
					if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
						tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
					}
					
					setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
					
					int FrBytes = tempSubMagTxt.getBytes(charset).length;
					
					//메세지 길이가 90Byte가 초과시 MMS
					if(FrBytes > 90) {
						setSendMsgVO.setSubMsgType("MMS");
					}else {// 아니면 SMS
						setSendMsgVO.setSubMsgType("SMS");
					}
				}
				
				if(kakaoVO.getBizJsonYn().equals("Y")) {
					kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
					
					String[] varValInfo = null;
					if( kakaoVO.getVarValList().size() != 0) {
						varValInfo = kakaoVO.getVarValList().get(count);
					}
					String jsonFileName = kakaoApiJsonSave.kakaoApiFTJsonSave(kakaoVO);
//					String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count));
					setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
				}
				
				kakaoSendList.add(setSendMsgVO);
			}
			kakaoVO.setKakaoSendList(kakaoSendList);
			
		} catch (Exception e) {
			System.out.println(e.toString());
			e.printStackTrace();
		}
		
		return kakaoVO;
	}
	
	
	public String kakaoSendMsgTest(KakaoVO kakaoVO) throws Exception {
		String templateContent = "";
		try {
			templateContent = kakaoSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, 0);
		} catch (Exception e) {
			System.out.println(e.toString());
			e.printStackTrace();
		}
		
		return templateContent;
	}
	
	
	public String kakaoSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) {
		System.out.println("tempSubMagTxt : "+ tempSubMagTxt);
		
//		String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
//		String tempSubMagTxt = msgTxt;
		
		//대체문자에 변환문자가 있는경우
		String[] varNm = new String[kakaoVO.getVarNmList().size()];
		int q=0;
		if(varNm.length != 0) {
			for(String temp : kakaoVO.getVarNmList()) {
				temp = temp.replaceAll("\\#\\{" , "§§");
				temp = temp.replaceAll("\\}" , "§");
				varNm[q] = temp;
				q++;
			}
			List<String[]> varValList = kakaoVO.getVarValList(); // value 값
			
			tempSubMagTxt = tempSubMagTxt.replaceAll(String.valueOf((char)13), "");
			
			tempSubMagTxt = tempSubMagTxt.replaceAll("\\#\\{" , "§§");
			tempSubMagTxt = tempSubMagTxt.replaceAll("\\}" , "§");
			
			String[] array = varValList.get(count)[0].split("§");
			for(int i=0; i < varNm.length; i++) {
				
				if (tempSubMagTxt.indexOf(varNm[i]) > -1) {
					if(array[i] != null) {
								
						System.out.println("as    :   "+varNm[i] +" : "+ StringUtil.getString(array[i]).replace('Ï', ','));
						
						tempSubMagTxt = tempSubMagTxt.replaceAll(varNm[i] , StringUtil.getString(array[i]).replace('Ï', ','));
						
						System.out.println(varNm[i] +" : "+ array[i].replace('Ï', ','));
						
					}else {
						tempSubMagTxt = tempSubMagTxt.replaceAll(varNm[i] , "");
					}
				}
			}
		}
		return tempSubMagTxt;
	}
	
	
	public String kakaoFTSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) throws Exception{

		List<String[]> varValList = kakaoVO.getVarValList();
		
		tempSubMagTxt = getKakaoFTCntReplace(varValList.get(count)[0], tempSubMagTxt);
		
		return tempSubMagTxt;
	}
	
	/*
	 * 카카오 친구톡 치환 내용에 대한 변환 처리
	 * 
	 * 
	 * */
	public String getKakaoFTCntReplace(String varValStr, String contents) throws Exception{		
		
		String[] array = varValStr.split("¶");
		String tmpContents = contents;
		for(int j=0; j < array.length; j++) {
			String tmpVarVal = array[j].replaceAll("§", ",");
			if(tmpVarVal.length() > 0) {
				
				if(tmpContents.contains("#{이름}") && j == 0) {
					tmpContents = tmpContents.replaceAll("\\#\\{이름\\}", tmpVarVal);
				}
				
				//1번째에 핸드폰 번호가 포함 되어 있어서 건너뜀
				
				if(tmpContents.contains("#{1}") && j == 2) {
					tmpContents = tmpContents.replaceAll("\\#\\{1\\}", tmpVarVal);
				}
				
				if(tmpContents.contains("#{2}") && j == 3) {
					tmpContents = tmpContents.replaceAll("\\#\\{2\\}", tmpVarVal);
				}
				
				if(tmpContents.contains("#{3}") && j == 4) {
					tmpContents = tmpContents.replaceAll("\\#\\{3\\}", tmpVarVal);
				}
				
				if(tmpContents.contains("#{4}") && j == 5) {
					tmpContents = tmpContents.replaceAll("\\#\\{4\\}", tmpVarVal);
				}
				
			}
			
		}
		
		return tmpContents;
	}
	
	/*
	 * 카카오 친구톡 치환문자 내용 스팸 필터
	 * 치환변수 내용 및 템플릿 내용, 스팸필터 단어 리스트를 전달하면 스팸 문구 포함 문구 리턴
	 * 없으면 공백을 리턴
	 * 
	 * */
	public String getKakaoFTCntRepToSpamFilter(List<String[]> varValList, List<String> resultSpamTxt, String contents) throws Exception {
		String spmFilterTxt = "";
		for(int i=0; i < varValList.size(); i++) {
			
			String tmpContents = getKakaoFTCntReplace(varValList.get(i)[0], contents);
			
			//입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함.
			String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
			//List<String> jasoList = HangulParser.disassemble(resultParser);
			//String assembleStr = HangulParser.assemble(jasoList);
			
			//데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함.
			int spmCnt = 0;
			for(String spmTxt : resultSpamTxt) {
				
				String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
				
				if(resultParser.contains(parserStr)) {
					
					//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
					spmFilterTxt += spmTxt + ",";
					spmCnt++;
					
				}
				
			}
			
			if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
				
				if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
					// 처음부터 idx 만큼 잘라낸 나머지 글자 
					spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); 	
					
				}
				
				System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
				
				return spmFilterTxt;
				
			}
			
		}
		return "";
	}
	
	/*
	 * 치환문자가 없는 내용에 대한 스팸필터링 처리
	 * 
	 * */
	public String getKakaoFTCntToSpamFilter(List<String> resultSpamTxt, String contents) throws Exception {
		String spmFilterTxt = "";
		//for(int i=0; i < varValList.size(); i++) {
			//String[] array = varValList.get(i)[0].split("¶");
			String tmpContents = contents;
			System.out.println(tmpContents);
			
			//입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함.
			String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
			//List<String> jasoList = HangulParser.disassemble(resultParser);
			//String assembleStr = HangulParser.assemble(jasoList);
			
			System.out.println("++++++++++++++ spam resultParser ::: "+resultParser);
			
			//데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함.
			int spmCnt = 0;
			for(String spmTxt : resultSpamTxt) {
				
				String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
				
				if(resultParser.contains(parserStr)) {
					
					//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
					spmFilterTxt += spmTxt + ",";
					spmCnt++;
					
				}
				
			}
			
			if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
				
				if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
					// 처음부터 idx 만큼 잘라낸 나머지 글자 
					spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); 	
					
				}
				
				System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
				
				return spmFilterTxt;
				
			}
			
		//}
		return "";
	}

	public static void statusResponseSet (StatusResponse statusResponse, HttpStatus httpStatus, String msg ) {
		statusResponse.setStatus(httpStatus);
		statusResponse.setMessage(msg);
		
	}
}
