package incheon.res.rdm.oe.requsr.service.impl;

import incheon.res.rdm.oe.intusr.mapper.RmtAusrDtMapper;
import incheon.res.rdm.oe.intusr.mapper.RmtDusrDtMapper;
import incheon.res.rdm.oe.intusr.vo.RmtAusrDtVO;
import incheon.res.rdm.oe.intusr.vo.RmtDusrDtVO;
import incheon.res.rdm.oe.requsr.mapper.RdmOeRequsrMapper;
import incheon.res.rdm.oe.requsr.service.RdmOeRequsrService;
import incheon.res.rdm.oe.requsr.vo.RdmOeRequsr;
import incheon.res.rdm.oe.requsr.vo.RdmOeRequsrVO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class RdmOeRequsrServiceImpl implements RdmOeRequsrService {
	protected Log log = LogFactory.getLog(this.getClass());

	@Resource
	private RdmOeRequsrMapper rdmOeRequsrMapper;
	
	@Resource
	private RmtAusrDtMapper rmtAusrDtMapper;
	
	@Resource
	private RmtDusrDtMapper rmtDusrDtMapper;
	
	/**
	 * @MethodDESC : 등록 요청 목록 조회
	 */
	public List selectRequsrList(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.selectRequsrList(vo);
	}

	/**
	 * @MethodDESC : 등록 요청 카운트 조회
	 */
	public int countList(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.countList(vo);
	}

	/**
	 * @MethodDESC : 등록 요청 상세 조회
	 */
	public RdmOeRequsr selectRequsr(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.selectRequsr(vo);
	}

	/**
	 * @MethodDESC : 관리번호 생성
	 */
	public String getUsrIdn(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.getUsrIdn(vo);
	}
	
	/**
	 * @MethodDESC : 사용자 일괄 사용승인
	 */
	public void approveRequsrBatch(RdmOeRequsrVO vo) throws Exception {
		String comIdnStr = vo.getUsrIdnChk();
		String [] chkId =comIdnStr.split(",");

		if(chkId != null){
			for(int i=0; i<chkId.length; i++){
				RdmOeRequsrVO RdmOeRequsrVO = new RdmOeRequsrVO();
				RdmOeRequsrVO.setUserAcntMngNo(chkId[i]);
				RdmOeRequsrVO.setAutzrId(vo.getAutzrId());
				RdmOeRequsr rdmOeRequsr = rdmOeRequsrMapper.selectRequsr(RdmOeRequsrVO);
				
				RmtAusrDtVO rmtAusrDtVO = new RmtAusrDtVO();
				rmtAusrDtVO.setUserAcntMngNo(rdmOeRequsr.getUserAcntMngNo());
				
				RmtAusrDtVO ausrDtVO = rmtAusrDtMapper.selectRmtAusrInfo(rmtAusrDtVO);
				if(ausrDtVO == null){
					RmtDusrDtVO rmtDusrDtVO = new RmtDusrDtVO();
					rmtDusrDtVO.setUserAcntMngNo(rdmOeRequsr.getUserAcntMngNo());
					RmtDusrDtVO resultVO = rmtDusrDtMapper.selectRmtDusrInfo(rmtDusrDtVO);
					rmtDusrDtMapper.deleteRmtDusrDt(rmtDusrDtVO);
					
					RmtAusrDtVO approveVO = new RmtAusrDtVO();
					approveVO = dusr2Ausr(resultVO);
					approveVO.setAutzrId(vo.getAutzrId());
					
					rmtAusrDtMapper.approveRequsrInfo(approveVO);
				}else{
					RmtDusrDtVO rmtDusrDtVO = new RmtDusrDtVO();
					rmtDusrDtVO.setUserAcntMngNo(rdmOeRequsr.getUserAcntMngNo());

					RmtDusrDtVO resultVO = rmtDusrDtMapper.selectRmtDusrInfo(rmtDusrDtVO);
					
					if(resultVO != null ){
						rmtDusrDtMapper.deleteRmtDusrDt(rmtDusrDtVO);
						rmtAusrDtVO.setAutzrId(vo.getAutzrId());
						rmtAusrDtMapper.approveRequsr(rmtAusrDtVO);
					}else{
						rmtAusrDtVO.setAutzrId(vo.getAutzrId());
						rmtAusrDtMapper.approveRequsr(rmtAusrDtVO);
					}
				}
			}
		}
	}
	
	/**
	 * @MethodDESC : 사용자 일괄 사용승인 취소
	 */
	public void rejectRequsrBatch(RdmOeRequsrVO vo) throws Exception{
		String comIdnStr = vo.getUsrIdnChk();
		String [] chkId =comIdnStr.split(",");

		if(chkId != null){
			for(int i=0; i<chkId.length; i++){
				RdmOeRequsrVO RdmOeRequsrVO = new RdmOeRequsrVO();
				RdmOeRequsrVO.setUserAcntMngNo(chkId[i]);
				RdmOeRequsrVO.setCnclrId(vo.getCnclrId());
				RdmOeRequsr rdmOeRequsr = rdmOeRequsrMapper.selectRequsr(RdmOeRequsrVO);
				
				RmtAusrDtVO rmtAusrDtVO = new RmtAusrDtVO();
				rmtAusrDtVO.setUserAcntMngNo(rdmOeRequsr.getUserAcntMngNo());
				
				RmtAusrDtVO ausrDtVO = new RmtAusrDtVO(); 
				ausrDtVO = rmtAusrDtMapper.selectRmtAusrInfo(rmtAusrDtVO);
				if(ausrDtVO != null){
			//		rmtAusrDtMapper.deleteRmtAusrDt(rmtAusrDtVO);
					rmtAusrDtMapper.updateRmtAusrCancelDt(rmtAusrDtVO);
					RmtDusrDtVO rmtDusrDtVO = new RmtDusrDtVO();
					rmtDusrDtVO = ausr2Dusr(ausrDtVO);
					rmtDusrDtVO.setCnclrId(vo.getCnclrId());
					
					rmtDusrDtMapper.rejectRequsrInfo(rmtDusrDtVO);
				}
			}
		}
	}
	
	/**
	 * @MethodDESC : rmtDusrDtVO 데이터를 rmtAusrDtVO 로 넣기
	 */
	public RmtAusrDtVO dusr2Ausr(RmtDusrDtVO vo) {
		RmtAusrDtVO resultVo = new RmtAusrDtVO();
		resultVo.setAprvDt(vo.getAprvDt());
		resultVo.setAutzrId(vo.getAutzrId());
		resultVo.setSno(vo.getSno());
		resultVo.setMno(vo.getMno());
		resultVo.setRtrcnDt(vo.getRtrcnDt());
		resultVo.setCnclrId(vo.getCnclrId());
		resultVo.setTkcgCnsltnDng(vo.getTkcgCnsltnDng());
		resultVo.setTkcgCnsltnGu(vo.getTkcgCnsltnGu());
		if(vo.getChkId() !=null){
			resultVo.setChkId(vo.getChkId());
		}
		resultVo.setBzentyInstMngNo(vo.getBzentyInstMngNo());
		resultVo.setDlbrTkcgYn(vo.getDlbrTkcgYn());
		resultVo.setSggCvlcptRcptPicId(vo.getSggCvlcptRcptPicId());
		resultVo.setDeptId(vo.getDeptCd());
		resultVo.setDaddr(vo.getDaddr());
		resultVo.setElaprLgnId(vo.getElaprLgnId());
		resultVo.setMblTelno(vo.getMblTelno());
		resultVo.setItntUserRegDt(vo.getItntUserRegDt());
		resultVo.setItntUserMdfcnDt(vo.getItntUserMdfcnDt());
		resultVo.setRrno(vo.getRrno());
		resultVo.setIndvDggAgreYn(vo.getIndvDggAgreYn());
		resultVo.setPrmsnTkcgYn(vo.getPrmsnTkcgYn());
		resultVo.setAthriCertId(vo.getAthriCertId());
		resultVo.setAthriCertInst(vo.getAthriCertInst());
		resultVo.setAthriCertNo(vo.getAthriCertNo());
		resultVo.setMtnSeCd(vo.getMtnSeCd());
		resultVo.setSysMngYn(vo.getSysMngYn());
		resultVo.setTelno(vo.getTelno());
		resultVo.setUserAuthrt(vo.getUserAuthrt());
		resultVo.setAddr(vo.getAddr());
		resultVo.setOgdpDeptNm(vo.getOgdpDeptNm());
		resultVo.setEml(vo.getEml());
		resultVo.setUserId(vo.getUserId());
		resultVo.setUserAcntMngNo(vo.getUserAcntMngNo());
		resultVo.setUserNm(vo.getUserNm());
		resultVo.setJbps(vo.getJbps());
		resultVo.setUserPswd(vo.getUserPswd());
		resultVo.setZip(vo.getZip());
		resultVo.setUseStts(vo.getUseStts());
		return resultVo;
	}
	
	/**
	 * @MethodDESC : RmtAusrDtVO 데이터를 RmtDusrDtVo 로 넣기
	 */
	public RmtDusrDtVO ausr2Dusr(RmtAusrDtVO vo) {
		RmtDusrDtVO resultVo = new RmtDusrDtVO();
		resultVo.setAprvDt(vo.getAprvDt());
		resultVo.setAutzrId(vo.getAutzrId());
		resultVo.setSno(vo.getSno());
		resultVo.setMno(vo.getMno());
		resultVo.setRtrcnDt(vo.getRtrcnDt());
		resultVo.setCnclrId(vo.getCnclrId());
		resultVo.setTkcgCnsltnDng(vo.getTkcgCnsltnDng());
		resultVo.setTkcgCnsltnGu(vo.getTkcgCnsltnGu());
		resultVo.setBzentyInstMngNo(vo.getBzentyInstMngNo());
		resultVo.setDlbrTkcgYn(vo.getDlbrTkcgYn());
		resultVo.setSggCvlcptRcptPicId(vo.getSggCvlcptRcptPicId());
		resultVo.setDeptCd(vo.getDeptId());
		resultVo.setDaddr(vo.getDaddr());
		resultVo.setElaprLgnId(vo.getElaprLgnId());
		resultVo.setMblTelno(vo.getMblTelno());
		resultVo.setItntUserRegDt(vo.getItntUserRegDt());
		resultVo.setItntUserMdfcnDt(vo.getItntUserMdfcnDt());
		resultVo.setRrno(vo.getRrno());
		resultVo.setIndvDggAgreYn(vo.getIndvDggAgreYn());
		resultVo.setPrmsnTkcgYn(vo.getPrmsnTkcgYn());
		resultVo.setAthriCertId(vo.getAthriCertId());
		resultVo.setAthriCertInst(vo.getAthriCertInst());
		resultVo.setAthriCertNo(vo.getAthriCertNo());
		resultVo.setMtnSeCd(vo.getMtnSeCd());
		resultVo.setSysMngYn(vo.getSysMngYn());
		resultVo.setTelno(vo.getTelno());
		resultVo.setUserAuthrt(vo.getUserAuthrt());
		resultVo.setAddr(vo.getAddr());
		resultVo.setOgdpDeptNm(vo.getOgdpDeptNm());
		resultVo.setEml(vo.getEml());
		resultVo.setUserId(vo.getUserId());
		resultVo.setUserAcntMngNo(vo.getUserAcntMngNo());
		resultVo.setUserNm(vo.getUserNm());
		resultVo.setJbps(vo.getJbps());
		resultVo.setUserPswd(vo.getUserPswd());
		resultVo.setZip(vo.getZip());
		resultVo.setUseStts(vo.getUseStts());
		return resultVo;
	}

	
	/**
	 * @MethodDESC : 사용취소이력 조회
	 */
	public List selectRequsrLogList(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.selectRequsrLogList(vo);
	}

	/**
	 * @MethodDESC : 사용취소이력 카운트
	 */
	public int countLogList(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.countLogList(vo);
	}
	
	/**
	 * @MethodDESC : 사용취소이력 상세 조회
	 */
	public RdmOeRequsr selectRequsrLog(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.selectRequsrLog(vo);
	}
	
	/**
	 * @MethodDESC : 사용취소이력 엑셀 출력
	 */
	public Map<String, Object> selectRequsrLogExcel(RdmOeRequsrVO vo)
			throws Exception {
		Map<String, Object> map = new HashMap<String, Object>();			//Mapper로 부터 가져온 결과를 담아 리턴해줄 Map 객체
		map.put("resultList",rdmOeRequsrMapper.selectRequsrLogExcel(vo));
		return map;
	}

	public int resetRequsr(RdmOeRequsrVO vo) throws Exception {
		return rdmOeRequsrMapper.resetRequsr(vo);
	}
}
