<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<script type="text/javascript" src="<c:url value='/js/txtSpecialReplace.js?date=202209210001'/>"></script>
<script type="text/javascript" src="<c:url value='/js/MJUtill.js'/>"></script>

<script>
$(document).ready(function (){
	
	var phoneIn = $(".send_right .phone", opener.document).html();
	//팝업으로 보내기 전에 realtime class 삭제 - 스크립트 제외
	phoneIn = phoneIn.replace(' class="realtime"',"");
	
	// DOM 구조로 변환
	var tempDiv = document.createElement("div");
	tempDiv.innerHTML = phoneIn;

	// 미리보기 영역 삭제
	var realtimeElement = tempDiv.querySelector(".preview_util");
	if (realtimeElement) {
		realtimeElement.remove();
	}

	// 최종 수정된 HTML 반환
	phoneIn = tempDiv.innerHTML.trim();
	
	
	$("#phonePreview").html(phoneIn)
	
});

//문자발송 처리 함수
function fn_testSendMsgData(){
	var form = document.msgForm;

	//회원 보유 잔액 비교
	var totPriceOnly = stringReplaceAll(form.totPrice.value, ",", "");
	var userMoneyOnly = stringReplaceAll(form.myPrice.value, ",", "");
	if(parseFloat(userMoneyOnly) < parseFloat(totPriceOnly)){
		alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
		return false;
	}
	
	//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
	var eventStatus = form.eventStatus.value;
	var eventRemainCash = parseFloat(form.eventRemainCash.value);
	
	if(eventStatus == 'Y'){
		
		if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
			
			alert("고객님의 이벤트 캐시 잔액은 " + eventRemainCash + "원으로 입력하신 수량의 문자를 전부 발송할 수 없습니다. 잔액 이하로 발송건수를 재설정하시기 바랍니다.");
			return false;
		}
		
		//이벤트 발송 문자 종류로 셋팅
		form.eventYn.value = "Y"; //이벤트문자 종류 설정
		
	}
	
	if(confirm("테스트 문자를 전송하시겠습니까?")){
		var imgFilePath = [];
		var imgFileId = [];
		var templateYn = [];
//		$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
		$('.preiew_img').find('.preBoxF').each(function(idx, el) {
			var imgSrc = $(el).find("img").attr("src");
			//if($(el).hasClass("edit_y")) {
			//에디터에서 넘어온 이미지인지 확인, 해당 문자열이 없으면 -1 반환
			if(imgSrc.indexOf('base64') > 0) {

				//이미지 변환
				const imgBase64 = $(el).find("img").attr("src");
				const decodImg = atob(imgBase64.split(',')[1]);  // base64~ 부분을 제외하고 데이터 디코딩
				
		
				let array = [];
				for (let i = 0; i < decodImg.length; i++) {
				  array.push(decodImg.charCodeAt(i));
				}

				const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
				const fileName = 'canvas_img_' + new Date().getMilliseconds() + '.jpg';
				let formData = new FormData();
				formData.append('file', file, fileName);

				$.ajax({
					type: 'post',
					url: '/web/mjon/msgdata/insertEditImageAjax.do',
					cache: false,
					data: formData,
					dataType:'json',
					processData: false,
					contentType: false,
					async: false,
					success: function (returnData, status) {
						if(status == 'success'){
							// imgFilePath 에 배열로 담아주기(이미지 순서대로)
							//console.log(imgFilePath);
							imgFilePath.push(returnData.filefullPath);
							imgFileId.push(returnData.atchFileId);
							templateYn.push('N');
						} else if(status== 'fail'){
							alert(returnData.message);
						}
					},
					error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
				});

			} else {
				
				var fileId = imgSrc.substring(imgSrc.indexOf("=")+1, imgSrc.indexOf("&"));
				//에디터 안거친 템플릿 이미지면 바로 src 때림
				imgFilePath.push(imgSrc);
				
				imgFileId.push(fileId);
				templateYn.push('Y');
			}	
		});
		
		form.templateYnAdvc.value = templateYn; // 템플릿 사용여부 담아주기
		form.imgFilePathAdvc.value = imgFilePath; // 저장한 이미지 경로 담아주기 
		form.imgFileIdAdvc.value = imgFileId;
// 		form.templateYn.value = templateYn; // 템플릿 사용여부 담아주기
// 		form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기 
// 		form.imgFileId.value = imgFileId;
		
		form.callFrom.value = removeDash(form.callFrom.value); // 발신번호 대쉬(-) 문자 없애주기
		form.reserveYn.value = "N"; // 즉시 / 예약 문자 선택 여부
		
		//광고, 선거문자 후처리
		var msgKind = form.msgKind.value;
// 		form.smsTxt.value = $(".preview_auto").find("pre").text();
		form.smsTxtArea.value = $(".preview_auto").find("pre").text();
		/* if(msgKind == 'A') {	//광고
			var adTxt = $('.ad_tit').text();
			var denyTxt = $('.deny_receipt').text();
			
			form.smsTxt.value = adTxt + $(".preview_auto").find("pre").text() + '\n' + denyTxt + " "; //광고 문구 뒤에 공백을 붙이게되므로, 뒤에 한칸 추가하여 바이트수를 맞춤
			
		} else if (msgKind == 'C') {	//선거문자
			var adTxt = '';
			var denyTxt = '';
			var adverYn = opener.document.msgForm.send_adYn.value;
			
			//선거문자 20건 발송에서는 선거 필수문구가 필수가 아니어서 선거문자 필수 문구가 있는지 체크하여 처리함.20231214 추가
			if(adverYn == 'Y'){
				adTxt = $('.ad_tit').text();
				denyTxt = $('.deny_receipt').html();
				denyTxt = denyTxt.replaceAll("<br>","\n");
			}
			
			form.smsTxt.value = adTxt + '\n' + $(".preview_auto").find("pre").text() + '\n' + denyTxt;
		
		} else {	//일반문자
			form.smsTxt.value = $(".preview_auto").find("pre").text();
		} */
		
		console.log('form : ',form)
		
		
		 // 폼 데이터를 배열로 직렬화
		 var form = $('#msgForm');
		 var formDataArray = form.serializeArray();

		 // 배열을 객체로 변환
		 var formData = {};
		 $.each(formDataArray, function(index, field) {
		     formData[field.name] = field.value;
		 });
		

		formData.mjonMsgSendVOList = [
			{
				phone: formData.callToList
			}
		];
		// 기존 callToList 제거
		delete formData.callToList;

		 // 빈 값 제거
		 removeEmptyValues(formData);
		
		// JSON 데이터 확인
	 	console.log("최종 formData:", JSON.stringify(formData, null, 4));
		
		
		
		
// 		return false;
// 		var data = new FormData(form);
		// url = "/web/mjon/msgdata/sendMsgDataAjax.do";
		var url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
		
		
		$.ajax({
			type: "POST",
			url: url,
			data: JSON.stringify(formData),
			contentType: 'application/json',
			dataType:'json',
			// async: false,
			// processData: false,
			// contentType: false,
			// cache: false,
			success: function (data) {
					

				var status = data.status;
				if("OK" == status){

					var resultCnt = Number(data.object.resultSts);
					var resultBlockCnt = Number(data.object.resultBlockSts);
					
					
					//차단한 번호 제외하고 발송건수가 1 미만인 경우는 발송이 안된 것
					if(resultCnt < 1) {
						alert("테스트 문자가 발송되지 않았습니다. \n"+ resultBlockCnt + "건의 번호가 수신거부 상태입니다.");
					} else if (resultCnt >= 1) {
						alert("테스트 문자가 발송되었습니다.");
					}
					
					//내 충전금액 변경해 주기 - 헤더, 충전금액 두군데 수정
					var afterCash = opener.numberWithCommas(data.object.afterCash);
					
					$("#hdUserMoney",opener.document).text(afterCash); // 헤더 보유잔액 부분
					$("#spUserMoney",opener.document).text(afterCash); // 문자발송 내 충전금
					$("#userMoney",opener.document).text(afterCash);  // 문자발송 내 충전금
					$("#userMoney",opener.document).attr('placeholder', afterCash);  // 문자발송 내 충전금
					
					window.close();
				}else{
					alert(data.message);
					return false;
				}
				
			},
	        error: function (xhr, status, error) { 
	        	alert("문자 발송에 실패하였습니다.");
				console.log("상태:", status);
				console.log("에러:", error);
				console.log("응답:", xhr.responseText);}
	    });
		
	}
	
}

//빈 값이나 null 값을 제거하는 함수
function removeEmptyValues(obj) {
    Object.keys(obj).forEach(function(key) {
        if (obj[key] === null || obj[key] === '') {
            delete obj[key];
        }
    });
}
</script>
<form id="msgForm" name="msgForm" method="post">
	<input type="hidden" id="msgKind" name="msgKind" value="${searchVO.msgKind}" /><!-- 문자종류(일반:N, 광고:A , 선거:C,관리자:S) -->
	<input type="hidden" id="msgType" name="msgType" value="${searchVO.msgType}" /><!-- 문자 종류 : 단문 - 4, 장문/그림 - 6 -->
	<input type="hidden" id="imgFilePath" name="imgFilePath" value="" /><!-- 선택 이미지 파일 경로 정보 , 로 구분 최대 3장까지 -->
	<input type="hidden" id="imgFilePathAdvc" name="imgFilePathAdvc" value="" /><!-- 선택 이미지 파일 경로 정보 , 로 구분 최대 3장까지 -->
	<input type="hidden" id="imgFileId" name="imgFileId" value="" /><!-- 선택 이미지 파일 아이디 정보 , 로 구분 최대 3장까지 -->
	<input type="hidden" id="imgFileIdAdvc" name="imgFileIdAdvc" value="" /><!-- 선택 이미지 파일 아이디 정보 , 로 구분 최대 3장까지 -->
	<input type="hidden" id="fileCnt" name="fileCnt" value="0" /><!-- 첨부파일 추가 갯수 -->
	<input type="hidden" id="mmsSubject" name="mmsSubject" value="${mmsSubject}"/> <!-- mms 제목 -->
	<input type="hidden" id="callFrom" name="callFrom" value="${callFrom}"/> <!-- 발신자 전화번호 -->
	<input type="hidden" id="eachPrice" name="eachPrice" value="${eachPrice}"/> <!-- 문자 개별 단가 금액 -->
	<input type="hidden" id="totPrice" name="totPrice" value="${eachPrice}"/> <!-- 총 결제 금액 -->
	<input type="hidden" id="smsLen" name="smsLen" value="0"/> <!-- 문자 길이 정보 -->
	<input type="hidden" id="reserveYn" name="reserveYn" value="N"/> <!-- 즉시/예약 선택여부 -->
	<input type="hidden" id="reqDate" name="reqDate" value=""/><!-- 예약문자 날짜 -->
	<input type="hidden" id="imgCnt" value="0" />
	<input type="hidden" id="templateYn" name="templateYn" value="" />
	<input type="hidden" id="templateYnAdvc" name="templateYnAdvc" value="" />
	<input type="hidden" id="smsTxtArea" name="smsTxtArea" value=""/><!-- 문자발송 문자 내용 -->
	<input type="hidden" id="myPrice" name="myPrice" value="<c:out value="${userMoney}"/>"/><!-- 보유 캐시금액 -->
	<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/><!-- 변환문자 유무 -->
	<!-- <input type="hidden" id="shortMsgCnt" name="shortMsgCnt" value="0"/> --><!-- 단문 변환문자 건수  -->
	<!-- <input type="hidden" id="longMsgCnt" name="longMsgCnt" value="0"/> --><!-- 장문 변환문자 건수 -->


	<!-- 이벤트 관련 변수 -->
	<input type="hidden" id="eventStatus" name="eventStatus" value="<c:out value='${eventMberInfo.eventStatus}'/>"/>
	<input type="hidden" id="eventRemainCash" name="eventRemainCash" value="<c:out value='${eventMberInfo.eventRemainCash}'/>"/>
	<input type="hidden" id="eventYn" name="eventYn" value="N"/>

	<div class="test_sendpop">
		<div class="info_popup">
			<div class="popup_heading">
				<p>테스트 발송</p>
			</div>
			<div class="layer_in">
				<ul class="info_list">
					<li>테스트 발송은 문자를 본인에게 발송하여 문자내용을 미리 확인하는 서비스 입니다.</li>
				</ul>
			</div>
		</div>
		<div class="test_wrap">
			<div class="number">
				<dl>
					<dt>수신번호</dt>
					<dd><input type="text" name="callToList" id="callToList" value="${mberManageVO.moblphonNo}"/></dd>
				</dl>
				<dl class="price">
					<dt>발송금액</dt>
					<dd><span>${eachPrice}</span>원</dd>
				</dl>
				<p class="text">발송하시겠습니까?<span>※ 문자 발송과 동일하게 요금이 차감됩니다.</span></p>
				<button type="button" class="btnType btnType10" onclick="fn_testSendMsgData(); return false;">테스트발송</button>
			</div>
			<div class="phone" id="phonePreview"></div>
		</div>
		
	</div>

</form>