//package cokr.xit.ens.biz.traffic.chuncheon.mydoc.v1.service;
//
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.ElctrnNticSndng;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.ElctrnNticSndngDetail;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.ElctrnNticSndngResult;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.repository.ElctrnNticSndngDetailRepository;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.repository.ElctrnNticSndngRepository;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.repository.ElctrnNticSndngResultRepository;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.domain.repository.NhtTmplatManageRepository;
//import cokr.xit.ens.biz.traffic.chuncheon.mydoc.v1.mq.UserElctrnNticProducer;
//import cokr.xit.ens.core.aop.EnsResponseVO;
//import cokr.xit.ens.core.exception.EnsException;
//import cokr.xit.ens.core.exception.code.EnsErrCd;
//import cokr.xit.ens.core.utils.CmmnUtil;
//import cokr.xit.ens.core.utils.crypto.SHA256;
//import cokr.xit.ens.modules.kkomydoc.v1.domain.repository.SendDetailKkoMydocRepository;
//import cokr.xit.ens.modules.kkomydoc.v1.model.BulkSendReqDTO;
//import cokr.xit.ens.modules.kkomydoc.v1.model.child.Document;
//import cokr.xit.ens.modules.kkomydoc.v1.model.child.NotiDocument;
//import cokr.xit.ens.modules.kkomydoc.v1.model.child.Property;
//import cokr.xit.ens.modules.kkomydoc.v1.model.child.Receiver;
//import cokr.xit.ens.modules.nicedici.service.NiceDiCiService;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import net.bytebuddy.utility.RandomString;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.util.StringUtils;
//
//import java.text.SimpleDateFormat;
//import java.util.*;
//
//@Slf4j
//@Service
//@RequiredArgsConstructor
//public class UserElctrnNticService {
//	private final ElctrnNticSndngRepository elctrnNticSndngRepository;
//	private final ElctrnNticSndngDetailRepository elctrnNticSndngDetailRepository;
//	private final ElctrnNticSndngResultRepository elctrnNticSndngResultRepository;
//	private final NhtTmplatManageRepository nhtTmplatManageRepository;
//	private final SendDetailKkoMydocRepository sendDetailKkoMydocRepository;
//	private final NiceDiCiService nicedDiCiService;
//
//
//	@Autowired
//	private UserElctrnNticProducer userElctrnNticProducer;
//
//	@Value("${contract.nice.dici.socket.site-code}")
//	private String SITE_CODE;
//	@Value("${contract.nice.dici.socket.site-pw}")
//	private String SITE_PW;
//	@Value("${contract.kakao.pay.mydoc.access-token}")
//	private String ACCESS_TOKEN;
//	@Value("${contract.kakao.pay.mydoc.contract-uuid}")
//	private String CONTRACT_UUID;
//
//
//	/**
//	 * 발송
//	 */
//	@Transactional
//	public void send() {
//
//		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
//		String yyyyMMddHHmm = dateFormat.format(new Date());
//		String beginSndngDt = String.format("%s00", yyyyMMddHHmm);
//		String endSndngDt = String.format("%s59", yyyyMMddHHmm);
//		this.send(beginSndngDt, endSndngDt);
//	}
//	/**
//	 * 발송
//	 */
//	@Transactional
//	public void send(String beginSndngDt, String endSndngDt) {
//
//		List<ElctrnNticSndng> list = elctrnNticSndngRepository.findAllBySndngProcessSttusAndSndngDtBetween("01", beginSndngDt, endSndngDt);
//		for(ElctrnNticSndng row : list) {
//			List<ElctrnNticSndngDetail> detailList = elctrnNticSndngDetailRepository.findAllDecByElctrnNticSndng(row);
//
//			List<String> jsonStrList = new ArrayList<>();
//			try {
//				jsonStrList = makeMessage(row, detailList);
//			} catch (Exception e) {
//				row.setSndngProcessSttus("99");
//				row.setErrorCn(e.getMessage());
//				elctrnNticSndngRepository.save(row);
//				continue;
//			}
//
//			for(String jsonStr : jsonStrList) {
//				Map<String, String> m = new HashMap<>();
//				m.put("accessToken", ACCESS_TOKEN);
//				m.put("contractUuid", CONTRACT_UUID);
//				m.put("jsonStr", jsonStr);
//				userElctrnNticProducer.pubBulkSend(CmmnUtil.toJsonString(m));
//			}
//
//
//			elctrnNticSndngDetailRepository.saveAll(detailList);
//		}
//
//
//	}
//
//
//	/**
//	 * 메시지포맷 작성
//	 */
//	@SuppressWarnings("deprecation")
//	private List<String> makeMessage(ElctrnNticSndng sndng, List<ElctrnNticSndngDetail> sndngDetails) throws EnsException {
//		List<String> jsonStrList = new ArrayList<>();
//
//		List<Document> documents = new ArrayList<>();
//		List<NotiDocument> notidocuments = new ArrayList<>();
//		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
//		String prefixExternalDocumentUuid = String.format("B-%s%s", simpleDateFormat.format(new Date()), RandomString.make(5));
//		int seq = 0;
//		for(ElctrnNticSndngDetail row : sndngDetails) {
//
//			String siteCode = SITE_CODE;       
//			String sitePw = SITE_PW; 
//			String payload = row.getMainCode();
//			String hash = null;
//			try {
//				if(StringUtils.isEmpty(row.getCnDetail()))
//					hash = SHA256.encrypt(row.getMainCode());
//				else
//					hash = SHA256.encrypt(row.getCnDetail());
////			} catch (NoSuchAlgorithmException e) {
//			} catch (Exception e) {
//				log.error(String.format("Hash 값 생성에 실패 하였습니다. [%s]. ", row.getCnDetail()), e);
//			}
//
//			EnsResponseVO ensResponseVO = nicedDiCiService.ci(siteCode, sitePw, row.getIhidnum());
//			String ci = ((Map<String, String>)ensResponseVO.getResultInfo()).get("ci");
//			Document document = new Document();
//			document.setTitle(sndng.getNhtTmplatManage().getNhtSj());
//			document.setCommon_categories(new String[] {"NOTICE"});  
//			document.setHash(hash);                                  
//			Receiver receiver = new Receiver();
//			if(ci==null) {
//				receiver.setPhone_number(null);                      
//				receiver.setName(null);                              
//				receiver.setBirthday(null);                          
//				receiver.setIs_required_verify_name(true);           
//			}else {                                                  
//				receiver.setCi(ci);                                  
//			}
//			document.setReceiver(receiver);                          
//			Property property = new Property();
//			String externalDocumentUuid = String.format("%s%09d", prefixExternalDocumentUuid, ++seq);
//			row.setLinkedUuid(externalDocumentUuid);
//			property.setLink(sndng.getNhtTmplatManage().getRedirectUrl());            
//			property.setPayload(payload);                                             
//			property.setMessage(sndng.getNhtTmplatManage().getNhtCn());               
//			property.setCs_number(sndng.getNhtTmplatManage().getCstmrCnterTlphonNo());
//			property.setCs_name(StringUtils.isEmpty(sndng.getNhtTmplatManage().getCstmrCnterNm())?"문의처":sndng.getNhtTmplatManage().getCstmrCnterNm());        
//			property.setExternal_document_uuid(externalDocumentUuid);
//			document.setProperty(property);                                           
//			documents.add(document);
//
//
//
//			if(!StringUtils.isEmpty(row.getElctrnNticSndng())) {
//				if(!StringUtils.isEmpty(row.getMobilePageCn()))
//					try {
//
////						NotiDocument notiDocument = (NotiDocument) CmmnUtil.jsonStringtoObj(NotiDocument.class, row.getMobilePageCn());
//						ObjectMapper mapper = new ObjectMapper();
//						NotiDocument notiDocument = mapper.readValue(row.getMobilePageCn(), NotiDocument.class);
//						notiDocument.setPayload``(payload);
//						notidocuments.add(notiDocument);
//					} catch (Exception e) {
//	//					log.error(String.format("고지정보 변환에 실패 했습니다. [%s]", row.getMobilePageCn()), e);
//						throw new EnsException(EnsErrCd.ERR405, String.format("고지정보 변환에 실패 했습니다. [%s]. %s", row.getMobilePageCn(), e.getMessage()));
//					}
//			}
//
//
//
//			if(documents.size()==100) {
//				BulkSendReqDTO bulkSendReqDTO = new BulkSendReqDTO();
//				bulkSendReqDTO.setDocuments(documents);
//				bulkSendReqDTO.setNotidocuments(notidocuments);
//				jsonStrList.add(CmmnUtil.toJsonString(bulkSendReqDTO));
//				documents = new ArrayList<>();
//				notidocuments = new ArrayList<>();
//			}
//
//		}
//
//
//
//		BulkSendReqDTO bulkSendReqDTO = new BulkSendReqDTO();
//		bulkSendReqDTO.setDocuments(documents);
//		bulkSendReqDTO.setNotidocuments(notidocuments);
//		jsonStrList.add(CmmnUtil.toJsonString(bulkSendReqDTO));
//
//
//
//		return jsonStrList;
//	}
//
//
//
//	/**
//	 * 발송결과 업데이트
//	 */
//	@Transactional
//	public void result() {
//
//		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
//		Calendar cal = Calendar.getInstance();
//		Date date = new Date();
//		cal.setTime(date);
//		cal.add(Calendar.MINUTE, -3);
//		String beginSndngDt = String.format("%s00", dateFormat.format(cal.getTime()));
//		cal.setTime(date);
//		cal.add(Calendar.MINUTE, -1);
//		String endSndngDt = String.format("%s59", dateFormat.format(new Date()));
//
//		this.result(beginSndngDt, endSndngDt);
//	}
//	/**
//	 * 발송결과 업데이트
//	 */
//	@SuppressWarnings("deprecation")
//	@Transactional
//	public void result(String beginSndngDt, String endSndngDt) {
//		List<ElctrnNticSndng> list = elctrnNticSndngRepository.findAllBySndngProcessSttusAndSndngDtBetween("01", beginSndngDt, endSndngDt);
//
//
//		for(ElctrnNticSndng row : list) {
//			List<ElctrnNticSndngResult> sndngResultList = elctrnNticSndngResultRepository.findAllByElctrnNticSndngId(row.getElctrnNticSndngId());
//			elctrnNticSndngResultRepository.saveAll(sndngResultList);
//			row.setSndngProcessSttus("99");
//			for(ElctrnNticSndngResult sndngResult : sndngResultList) {
//				if(StringUtils.isEmpty(sndngResult.getErrorCn())) {
//					row.setSndngProcessSttus("02");
//					break;
//				}
//			}
//			elctrnNticSndngRepository.save(row);
//
//		}
//
//	}
//
//	/**
//	 *
//	 * 메소드 설명: 상태변경
//	 * @author: mk1126sj
//	 * @date: 2021. 12. 29.
//	 */
//	@Transactional
//	public void status() {
//
//		List<ElctrnNticSndng> list = elctrnNticSndngRepository.findAllBySndngProcessSttus("02");
//
//		for(ElctrnNticSndng row : list) {
//			List<String> externalDocumentUuidList = elctrnNticSndngDetailRepository.findExternalDocumentUuidByElctrnNticSndng(row);
//
//			Map<String, Object> m = new HashMap<>();
//			m.put("accessToken", ACCESS_TOKEN);
//			m.put("contractUuid", CONTRACT_UUID);
//			m.put("externalDocumentUuidList", externalDocumentUuidList);
//			userElctrnNticProducer.pubBulkStatus(CmmnUtil.toJsonString(m));
//		}
//
//	}
//
//
//	/**
//	 *
//	 * 메소드 설명: 발송마스터 및 발송상세 상태정보 fetch
//	 * void 요청처리 후 응답객체
//	 * @author: mk1126sj
//	 * @date: 2021. 12. 29.
//	 */
//	public void fetchStatus() {
//
//		List<ElctrnNticSndng> list = elctrnNticSndngRepository.findAllBySndngProcessSttus("02");
//
//		for(ElctrnNticSndng row : list) {
//			elctrnNticSndngResultRepository.saveFetchStatus(row);
//		}
//
//	}
//
//
//
//
//}
