package itn.com.cmm.util; import org.apache.commons.lang3.StringUtils; import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.mjo.msg.service.MjonMsgVO; public class SlackMessageFormatUtil { private static final String PREFIX_SMISHING = "[스미싱의심]"; private static final String PREFIX_RESERVE = "[예약]"; private static final String PREFIX_IMAGE = "그림문자 "; /** * 일반 SMS 메시지 텍스트 포맷팅 */ public static String formatSmsText(MjonMsgVO mjonMsgVO) { String smsTxt = mjonMsgVO.getSmsTxt(); String reserveYn = safeGetString(mjonMsgVO.getReserveYn()); String delayYn = safeGetString(mjonMsgVO.getDelayYn()); String smishingYn = safeGetString(mjonMsgVO.getSmishingYn()); // 공통 텍스트 포맷팅 로직 적용 smsTxt = formatMessagePrefix(smsTxt, reserveYn, "Y".equals(smishingYn) || "Y".equals(delayYn)); // 그림 문자 처리 (SMS 전용 로직) int fileCount = parseIntOrDefault(mjonMsgVO.getFileCnt(), 0); if ("6".equals(mjonMsgVO.getMsgType()) && fileCount > 0 && StringUtils.isEmpty(smsTxt)) { smsTxt = "그림문자 " + smsTxt; } return smsTxt; } /** * 카카오톡 메시지 텍스트 포맷팅 */ public static String formatKakaoText(KakaoSendAdvcVO sendVO) { String smsTxt = sendVO.getTemplateContent(); String reserveYn = safeGetString(sendVO.getReserveYn()); String atDelayYn = safeGetString(sendVO.getAtDelayYn()); // 공통 텍스트 포맷팅 로직 적용 return formatMessagePrefix(smsTxt, reserveYn, "Y".equals(atDelayYn)); } public static String formatSandName(MjonMsgVO mjonMsgVO) { String userId = mjonMsgVO.getUserId(); String callFrom = mjonMsgVO.getCallFrom(); String msgType = getMessageTypeLabel(mjonMsgVO.getMsgType(), mjonMsgVO.getFileCnt()); return String.format("[%s][%s]%s", userId, callFrom, msgType); } /** * 메시지 접두사 포맷팅 공통 로직 (예약 및 스미싱 의심 접두사 처리) * * @param messageText 원본 메시지 텍스트 * @param reserveYn 예약 여부 * @param isSmishing 스미싱 의심 여부 * @return 포맷팅된 메시지 텍스트 */ public static String formatMessagePrefix(String messageText, String reserveYn, boolean isSmishing) { if ("Y".equals(reserveYn)) { return isSmishing ? PREFIX_SMISHING + PREFIX_RESERVE + messageText : PREFIX_RESERVE + messageText; } else if (isSmishing) { return PREFIX_SMISHING + messageText; } return messageText; } /** * @카카오톡용 sandName 포맷팅 메서드 */ public static String formatKakaoSandName(KakaoSendAdvcVO sendVO) { String userId = sendVO.getUserId(); String callFrom = sendVO.getCallFrom(); String msgType = getKakaoMessageTypeLabel(sendVO.getMsgType()); return String.format("[%s][%s]%s", userId, callFrom, msgType); } /** * 메시지 타입 레이블 반환 (SMS 전용) * * @param msgType 메시지 타입 * @param fileCnt 파일 개수 * @return 메시지 타입 레이블 */ public static String getMessageTypeLabel(String msgType, String fileCnt) { int fileCount = parseIntOrDefault(fileCnt, 0); switch (msgType) { case "4": return "[단문]"; case "6": return fileCount == 0 ? "[장문]" : "[그림]"; default: return ""; } } /** * 카카오톡 메시지 타입 레이블 반환 * * @param msgType 메시지 타입 * @return 메시지 타입 레이블 */ public static String getKakaoMessageTypeLabel(String msgType) { switch (msgType) { case "8": return "[알림톡]"; case "9": return "[친구톡]"; default: return ""; } } /** * 정수로 변환, 변환 실패 시 기본값 반환 * * @param value 변환할 문자열 * @param defaultValue 기본값 * @return 변환된 정수 또는 기본값 */ public static int parseIntOrDefault(String value, int defaultValue) { try { return Integer.parseInt(value); } catch (NumberFormatException e) { return defaultValue; } } /** * 안전하게 문자열 가져오기 (null 체크) * * @param value 원본 문자열 * @return 원본 문자열 또는 빈 문자열 */ public static String safeGetString(String value) { return value == null ? "" : value; } }