package itn.let.kakao.kakaoComm;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import itn.com.cmm.MjonFTSendVO;
import itn.let.mjo.msg.service.MjonMsgVO;
import lombok.Getter;
import lombok.Setter;

/**
* @FileName : KakaoVO.java
* @Project : mjon
* @Date : 2023. 1. 26.
* @작성자 :  WYH

* @프로그램 설명 : 카카오톡 요청 변수 목록 (문자온VO를 상속 받음)
*/
@Getter
@Setter
public class KakaoVO extends MjonMsgVO{

	private static final long serialVersionUID = 536382850588307019L;
	
	/** ---------------리스트 변수 설정------------------------- */
	
	private List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>(); // 변환문자 변경내용 카카오 전송리스트
	
	/** ---------------공통 변수 설정------------------------- */
	
	private String bizUrl = "";			// 요청 URL
	
	private String bizReturnMsg = "";	// 응답메세지
	
	private String bizReturnCode = "";	// 응답코드 200: 성공 , 나머지 실패
	
	private String sendPhone = "";		// 발신자 번호
	
	private String destPhone = "";		// 수신자 번호
	
	private String subMsgSendYn = "N";	// 대체문자 전송:Y , 미전송:N

	private String subMsgTxtReplYn = "";// 대체문자 치환문자 유무 Y:있음 N:없음
	
	private String subMsgType = "";		// 대체문자 전송 타입 (SMS, MMS)
	
	private String subMsgTxt = "";		// 대체문자 내용
	
	private String count = "";			// 페이지 별 템플릿 개수 (default: 30)
	
	private String page  = "";			// 요청 페이지 (default: 1)
	
	private String bizUmid = "";		//대체문자 발송 PK 아이디
	
	
	private List<String> varNmList;			// 변수 이름
	
	private List<String[]> varValList;		// 변수 값
	
	private String sendType = "";		// 알림톡 : AT, 친구톡 : FT
	
	private String adFlag;				//친구톡 광고성 정보 사용 유무(Y:사용 , N:미사용)
	
	/** ---------------profile 변수 설정------------------------- */
	private String profileId = "";		// profile ID
	
	private String userId = "";			// 사용자 ID
	
	private String phoneNumber = "";	// 토큰을 수신할 휴대폰번호(yellow ID의 핸드폰번호와 일치)
	
	private String yellowId = "";		// 카카오톡 체널(@IDf)
	
	private String token = "";			// 수신토큰
	
	private String senderKey = "";		// 발신프로필 키
	
	private String senderKeyType = "";	// 발신프로필 키 타입
	
	private String deleteYn = "";		//발신프로필 삭제 여부
	
	/** ---------------JSON 파일 설정------------------------- */
	
	private String bizJsonYn = "N";		// json 파일여부 (Y: 파일있음, N : 파일없음) 
	
	private String bizJsonName = "";	// json 파일명


	/** ---------------CATEGORY------------------------- */
	
	private String categoryDepth = "";		// 카테고리 차수(1:1차, 2:2차, 3:3차 카테고리 정보)
	
	private String categoryType = "";		// 카테고리 종류(P:발신프로필, T:템블릿)
	
	private String categoryGroupName = "";	// 카테고리 그룹 이름
	
	private String categoryCode = "";		// 카테고리 코드
	
	private String categoryName = "";		// 카테고리 이름
	
	private String categoryInclusion = "";	// 카테고리 적용 대상 템플릿 설정
	
	private String categoryExclusion = "";	// 카테고리 제외 대상 템플릿 설정
	
	
	/** ---------------IMAGE------------------------- */
	
	private String imgTitle = "";				//이미지 제목
	
	private String imageType = "";				//이미지 타입 (I:기본 이미지, W:와이드 이미지)
	
	private String imgLink = "";				//이미지 클릭시 이동 할 URL(http:// 또는 https:// 포함)
	
	
	/** ---------------TEMPLATE------------------------- */
	
	private String templateCode = "";			// 템플릿 코드
	
	private String newTemplateCode = "";		//수정하려는 템플릿 코드 ( 템플릿 수정할때 사용)
	
	private String[] arrTemplateCode;	//템플릿코드 배열로 받아오기		
	
	private String templateName = "";			// 템플릿 이름
	
	private String templateMessageType = "";	// 템플릿 메시지 유형 (BA:기본형(default), EX:부가정보형, AD:광고추가형, MI:복합형)
	
	private String templateEmphasizeType = "";	// 템플릿 강조 유형
	
	private String templateContent = "";		// 템플릿 내용
	
	private String templateExtra = "";			// 템플릿 부가정보
	
	private String tamplateAd = "";				// 템플릿 광고성 메시지
	
	private String templateImageName = "";		// 템플릿 이미지 파일명 - templateEmphasizeType “IMAGE” 선택 시 필수
	
	private String templateImageUrl = "";		// 템플릿 이미지 링크 - templateEmphasizeType “IMAGE” 선택 시 필수
	
	private String templateTitle = "";			// 템플릿 내용 중 강조 표기할 핵심 정보 - templateEmphasizeType “TEXT” 선택 시 필수
	
	private String templateSubtitle = "";		// 템플릿 강조 표기 보조 문 - templateEmphasizeType “TEXT” 선택 시 필수
	
	private String templateHeader = "";			// 헤더 (최대 16 자까지 입력 가능)
	
	private Boolean securityFlag;				// 보안 템플릿 여부( OTP 등 보안 메시지 일 경우 설정 발신 당시의 메인 디바이스를 제외한 모든 디바이스에 메시지 텍스트 미 노출)
	
	private String templateStatus = "";			// 템플릿 상태 (REG: 등록, REQ: 검수요청, REJ: 반려, STP: 차단, RDY: 발송전, ACT: 정상, DMT: 휴면, BLK: 차단)
	
	private String keyword = "";				//템플릿 검색 키워드
	
	/** ---------------BUTTONS_TEMPLATE------------------------- */
	
	private List<KakaoButtonVO> buttonVOList = new ArrayList<KakaoButtonVO>();
	
	private String buttonName = "";			// 버튼명 - linkType “AC” 선택 시 버튼명은 “채널추가” 로 고정
	
	private String buttonLinkType = "";		// 버튼 링크 타입 (DS:배송조회, WL:웹링크, AL:앱링크, BK:봇키워, MD: 메시지전달, AC: 채널추가, BC: 상담톡전환, BT: 봇전환, P1: 이미지 보안전송 플러그인, P2 : 개인정보이용 플러그인, P3: 원클릭 결제 플러그인)
	
	private String buttonLinkAnd = "";		// Android 앱 링크 주소 (AL 사용시 필수) - linkIos, linkAnd, linkMo 중 2 가지 필수 입력
	
	private String buttonLinkIos = "";		// IOS 앱 링크 주소 (AL 사용시 필수)
	
	private String buttonLinkMo = "";		// 모바일 웹 링크 주소 (WL 사용시 필수)
	
	private String buttonLinkPc = "";		// PC 웹 링크 주소 (WL 사용시 선택)
	
	private String buttonPluginId = "";		// 플러그인 ID (P1, P2, P3 사용시 필수)
	
	
	/** ---------------QUICKREPLIES_TEMPLATE------------------------- */
	
	private String quickName = "";
	
	private String quickLinkType = "";		// 퀵 링크 타입 (WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, BC : 상담톡전환, BT: 봇전환)
	
	private String quickLinkAnd = "";		// Android 앱 링크 주소 (AL 사용시 필수)
	
	private String quickLinkIos = "";		// IOS 앱 링크 주소 (AL 사용시 필수)
	
	private String quickLinkMo = "";		// 모바일 웹 링크 주소 (WL 사용시 필수)
	
	private String quickLinkPc = "";		// PC 웹 링크 주소 (WL 사용시 선택) 
	
	
	/** ---------------기타 사용 변수들------------------------- */
	private String formListType = "";				//템플릿 리스트 화면의 리스트 종류 (리스트형, 썸네일형)
	private String menuTopTab;						//알림톡 최상단 탭 종류(알림톡, 친구톡, 카카오설정, 알림톡/친구톡 소개)
	private String menuSubTab;						//알림톡 중간 서브 탭 종류(사용안내, 채널ID 등록/관리, 알림톡 템플릿 등록/관리, 친구톡 템플릿 등록/관리)
	private String searchCondition2;				//검색어 옵션 변수
	private String kakaoResendSuccCount = "0";		//카카오 대체문자 성공 건수
	private String kakaoResendFailCount = "0";		//카카오 대체문자 실패 건수
	
	private String atSuccessCount = "0";			//카카오 알림톡 성공 건수
	private String ftSuccessCount = "0";			//카카오 친구톡 성공 건수
	private String atFailCount = "0";				//카카오 알림톡 실패 건수
	private String ftFailCount = "0";				//카카오 친구톡 실패 건수
	
	/*-----------------알림톡 발송 단가 계산 변수--------------------*/
	
	private String atSuccPrice = "0";				//카카오 알림톡 성공 금액 - 성공 건수 * eachPrice
	private String ftSuccPrice = "0";				//카카오 친구톡 성공 금액 - 성공 건수 * eachPrice
	private String atFailPrice = "0";				//카카오 알림톡 실패 금액 - 실패 건수 * eachPrice
	private String ftFailPrice = "0";				//카카오 친구톡 실패 금액 - 실패 건수 * eachPrice
	private String kakaoResendSuccPrice = "0";		//카카오 대체문자 성공 금액 - 성공 건수 * eachPrice
	private String kakaoResendFailPrice = "0";		//카카오 대체문자 실패 금액 - 실패 건수 * eachPrice
	
	private String atSuccCntSum = "0";				//카카오 알림톡 성공 건수 합계
	private String ftSuccCntSum = "0";				//카카오 친구톡 성공 건수 합계
	private String atFailCntSum = "0";				//카카오 알림톡 실패 건수 합계
	private String ftFailCntSum = "0";				//카카오 친구톡 실패 건수 합계
	private String kakaoResenSuccSum = "0";			//카카오 대체문자 성공 건수 합계
	private String kakaoResenFailSum = "0";			//카카오 대체문자 실패 건수 합계
	
	private String atSuccPriceSum = "0";			//카카오 알림톡 성공 금액 함계
	private String ftSuccPriceSum = "0";			//카카오 친구톡 성공 금액 합계
	private String atFailPriceSum = "0";			//카카오 알림톡 실패 금액 합계
	private String ftFailPriceSum = "0";			//카카오 친구톡 실패 금액 합계
	private String kakaoResendSuccPriceSum = "0";	//카카오 대체문자 성공 금액 함계
	private String kakaoResendFailPriceSum = "0";	//카카오 대체문자 실패 듬액 합계
	
	
	/*-----------------테스트 변수--------------------*/
	private String sbscrbDe = "";
	private String moblphonNo = "";
	private String dept = "";
	private String atchFileId = "";
	private String workAtchFileId = "";
	private String fileSn = "";
	private String fileCn = "";
	
	public String fileStreCours = "";
	public String orignlFileNm = "";
	public String streFileNm = "";
	public String fileExtsn = "";
	public String fileSize = "";
	
	public int startCount = 0;
	public int endCount = 0;
	
	public String phmType = "";
	
	/*-----------------친구톡 변수--------------------*/
	private String friendId;						//친구톡 템플릿 고유 아이디(IDGEN)
	private String imageTitle;						//친구톡 이미지 제목
	private String imageLink;						//친구톡 이미지 클릭시 링크 주소
	private String jsonText;						//json 파일 생성시 내용 저장(혹시 몰라서 내용도 별도로 저장함)
	private String imageFileName;					//친구톡 이미지 원본 파일명

	private String successDay;
	private String successMonth;
	private String successYear;		
	private String successCntDay;
	private String successCntMonth;
	private String successCntYear;
	
	
	
	//재전송 영역
	private String msgResendAllFlag;
	private String msgResendAllGroupId;
	private String msgResendAllTmpKey;
	private String msgResendAllYellowId;
	
	private String bizKakaoResendType;
	private String fileCnt;

	private List<Map<String, String>> varListMap;

	private List<MjonFTSendVO> mjonFTSendVOList = new ArrayList<>();
	
	@Override
	public String toString() {
		String varListMapString = "[";
		if (varListMap != null && !varListMap.isEmpty()) {
			StringBuilder sb = new StringBuilder();
			for (Map<String, String> map : varListMap) {
				if (sb.length() > 0)
					sb.append(", ");
				if (map == null) {
					sb.append("null");
				} else {
					sb.append("{");
					String prefix = "";
					for (Map.Entry<String, String> entry : map.entrySet()) {
						sb.append(prefix).append(entry.getKey()).append("=").append(entry.getValue());
						prefix = ", ";
					}
					sb.append("}");
				}
			}
			varListMapString += sb.toString();
		}
		varListMapString += "]";
		
		
		StringBuilder mjonFTListSb = new StringBuilder("[");
		if (mjonFTSendVOList != null && !mjonFTSendVOList.isEmpty()) {
			String prefix = "";
			for (MjonFTSendVO vo : mjonFTSendVOList) {
				mjonFTListSb.append(prefix).append(vo == null ? "null" : vo.toString());
				prefix = ", ";
			}
		}
		mjonFTListSb.append("]");
		
		
		return "KakaoSendAdvcVO[" +
			"\n senderKey=[" + senderKey + "]" +
			"\n , subMsgTxtReplYn=[" + subMsgTxtReplYn + "]" +
			"\n , subMsgSendYn=[" + subMsgSendYn + "]" +
			"\n , reserveYn=[" + getReserveYn() + "]" +
			"\n , divideCnt=[" + getDivideCnt() + "]" +
			"\n , bizJsonYn=[" + bizJsonYn + "]" +
			"\n , templateEmphasizeType=[" + templateEmphasizeType + "]" +
			"\n , templateSubtitle=[" + templateSubtitle + "]" +
			"\n , txtReplYn=[" + getTxtReplYn() + "]" +
			"\n , callFrom=[" + getCallFrom() + "]" +
			"\n , templateCode=[" + templateCode + "]" +
			"\n , divideTime=[" + getDivideTime() + "]" +
			"\n , reqDate=[" + getReqDate() + "]" +
			"\n , atSmishingYn=[" + getAtSmishingYn() + "]" +
			"\n , menuTopTab=[" + menuTopTab + "]" +
			"\n , templateContent=[" + templateContent + "]" +
			"\n , templateTitle=[" + templateTitle + "]" +
			"\n , subMsgTxt=[" + subMsgTxt + "]" +
			"\n , divideChk=[" + getDivideChk() + "]" +
			"\n , sendType=[" + sendType + "]" +
			"\n , msgType=[" + getMsgType() + "]" +
			"\n , userId=[" + userId + "]" +
			"\n , varListMap=[" + varListMapString + "]" +
			"\n , befCash=[" + getBefCash() + "]" +
			"\n , befPoint=[" + getBefPoint() + "]" +
			"\n , mjonFTSendVOList=" + mjonFTListSb.toString() +
			"\n ]";
	}
	
	public String ftToString() {
		StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
		sb.append("\n sendKind=[").append(getSendKind()).append("]");
		sb.append("\n , senderKey=[").append(senderKey).append("]");
		sb.append("\n , imageFileName=[").append(imageFileName).append("]");
		sb.append("\n , imageType=[").append(imageType).append("]");
		sb.append("\n , atchFileId=[").append(atchFileId).append("]");
//		sb.append("\n , imgTitle=[").append(imgTitle).append("]");
//		sb.append("\n , imgLink=[").append(imgLink).append("]");
		sb.append("\n , templateContent=[").append(templateContent).append("]");
		sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
//		sb.append("\n , imgLink=[").append(imgLink).append("]");
//		sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
//		sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
//		sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
//		sb.append("\n , subMsgType=[").append(subMsgType).append("]");
		sb.append("\n , subMsgTxt=[").append(subMsgTxt).append("]");
		sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
		sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
//		sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
//		sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
		sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
//		sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
		sb.append("\n , reqDate=[").append(getReqDate()).append("]");
//		sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
//		sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
//		sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
//		sb.append("\n , atDelayYn=[").append(getAtDelayYn()).append("]");
//		sb.append("\n , filePath1=[").append(getFilePath1()).append("]");
//		sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
		StringBuilder btnListSb = new StringBuilder("[");
		if (buttonVOList != null && !buttonVOList.isEmpty()) {
			String prefix = "";
			for (KakaoButtonVO btn : buttonVOList) {
				btnListSb.append(prefix).append(btn == null ? "null" : btn.toString());
				prefix = ", ";
			}
		}
		btnListSb.append("]");
		sb.append("\n , buttonVOList=").append(btnListSb);


		// mjonFTSendVOList 내용
		StringBuilder ftList = new StringBuilder("[");
		if (mjonFTSendVOList != null && !mjonFTSendVOList.isEmpty()) {
			String prefix = "";
			for (MjonFTSendVO vo : mjonFTSendVOList) {
				ftList.append(prefix).append(vo == null ? "null" : vo.toString());
				prefix = ", ";
			}
		}
		ftList.append("]");
		sb.append("\n , mjonFTSendVOList=").append(ftList);

		sb.append("\n]");
		return sb.toString();
	}
	
	

	
}
