package itn.let.cert.phone.web;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cert.phone.service.CertPhoneService;
import itn.let.cert.phone.service.MberCertPhoneVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
import itn.let.uat.uia.web.SendLogVO;

/**
 * 
 * @author 		: 이호영
 * @fileName 	: CertIpController.java 
 * @date 		: 2024.11.19
 * @description : 허용 IP 관련 컨트롤러
 * =========================================================== 
 * DATE          AUTHOR   NOTE 
 * ----------------------------------------------------------- *
 * 2024.11.19    이호영          최초 생성
 * 
 * 
 * 
 */
@Controller
public class CertPhoneController {
	
	
	/* certPhoneService */
	@Resource(name = "CertPhoneService")
	private CertPhoneService certPhoneService;
	
	@Resource(name = "MjonMsgDataService")
	private MjonMsgDataService mjonMsgDataService;
	
	
	
	@RequestMapping(value = {"/cert/phone/selectMberCertPhoneList"})
	public ResponseEntity<StatusResponse> selectMberCertPhoneList(MberCertPhoneVO mberCertPhoneVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		mberCertPhoneVO.setMberId(userId);

		return ResponseEntity.ok().body(certPhoneService.selectMberCertPhoneListWhereUserId(userId));
	}	

	@RequestMapping(value = {"/cert/phone/findByCertPhoneInfo.do"})
	public ResponseEntity<StatusResponse> findByCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		return ResponseEntity.ok().body(certPhoneService.findByCertPhoneInfo(mberCertPhoneVO));
	}	
	
	@RequestMapping(value = {"/cert/phone/insertCertPhone.do"})
	public ResponseEntity<StatusResponse> insertCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		
		System.out.println(" :: insertCertPhone :: ");
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		mberCertPhoneVO.setFrstRegisterId(userId);
		mberCertPhoneVO.setMberId(userId);

		
		return ResponseEntity.ok().body(certPhoneService.insertCertPhone(mberCertPhoneVO, loginVO.getMoblphonNo()));
	}	
	
	@RequestMapping(value = {"/cert/phone/updateCertPhone.do"})
	public ResponseEntity<StatusResponse> updateCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		mberCertPhoneVO.setFrstRegisterId(userId);
		if(StringUtils.isEmpty(mberCertPhoneVO.getMberId()) ) {
			mberCertPhoneVO.setMberId(userId);
		}
		
		
		return ResponseEntity.ok().body(certPhoneService.updateMberCertPhone(mberCertPhoneVO));
	}	
	
	@RequestMapping(value = {"/cert/phone/deleteCertPhone.do"})
	public ResponseEntity<StatusResponse> deleteCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		mberCertPhoneVO.setLastUpdusrId(userId);

		if(StringUtils.isEmpty(mberCertPhoneVO.getMberId()) ) {
			mberCertPhoneVO.setMberId(userId);
		}
		
		
		return ResponseEntity.ok().body(certPhoneService.deleteCertPhone(mberCertPhoneVO));
	}	
	
	
	
	
	
	@RequestMapping(value = {"/cert/phone/sendSysMsgDataAjax.do"})
	public ResponseEntity<StatusResponse> sendSysMsgDataAjax(MberCertPhoneVO mberCertPhoneVO) throws Exception {
		
		
		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		
		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		mberCertPhoneVO.setMberId(userId);

		// 번호 중복 확인
		MberCertPhoneVO mberCertIpListVO = (MberCertPhoneVO) certPhoneService.findByCertPhoneInfo(mberCertPhoneVO).getObject();
		if(mberCertIpListVO != null || loginVO.getMoblphonNo().equals(mberCertPhoneVO.getMbtlnum()) ) {
			return ResponseEntity.ok().body(new StatusResponse(HttpStatus.CONFLICT, "등록된 번호입니다.", LocalDateTime.now()));
		}

		MjonMsgVO mjonMsgVO = new MjonMsgVO();
		mjonMsgVO.setCallTo(mberCertPhoneVO.getMbtlnum());
		MjonMsgReturnVO returnVO = mjonMsgDataService.sendSysMsgData(mjonMsgVO);

		String resultSts = returnVO.getSendMsgCnt();
		String resultBlockSts = returnVO.getSendMsgBlockCnt();

		String msg= "";
		Map<String, String> returnMap = new HashMap<>();
		HttpStatus httpStatus = null;
		if (!resultSts.equals("0")) {
	
			httpStatus = HttpStatus.OK;
			returnMap.put("msg", "문자 전송이 완료되었습니다.");
			returnMap.put("resultSts", resultSts);
			returnMap.put("resultBlockSts", resultBlockSts);

		} else {

			httpStatus = HttpStatus.BAD_REQUEST;
			returnMap.put("msg", "문자 전송에 오류가 발생하였습니다.");
			returnMap.put("resultSts", "0");
			returnMap.put("resultBlockSts", "0");

		}
		return ResponseEntity.ok().body(new StatusResponse(httpStatus, returnMap, LocalDateTime.now()));	

	}	
	
	

	@RequestMapping(value = {"/cert/phone/selectSysMsgLogCheck.do"})
	public ResponseEntity<StatusResponse> selectSysMsgLogCheck(MberCertPhoneVO mberCertPhoneVO) throws Exception {

		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

		if(userId == null) {
			if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
		}
		mberCertPhoneVO.setMberId(userId);
//		
		return ResponseEntity.ok().body(certPhoneService.selectSysMsgLogCheck(mberCertPhoneVO));	

	}
	
	
	
	
	
	
	
	
	
	
	
	
}