package incheon.res.rdm.dp.accept.service.impl;


import incheon.com.cmm.context.RequestContext;
import incheon.com.security.vo.LoginVO;
import incheon.res.rdm.com.minwon.MinwonService;
import incheon.res.rdm.com.minwon.service.RdmComMinwonService;
import incheon.res.rdm.com.minwon.vo.*;
import incheon.res.rdm.com.msgnlog.service.RdmComMsgnlogService;
import incheon.res.rdm.com.msgnlog.vo.RdmComMsgnlogVO;
import incheon.res.rdm.com.perinfo.vo.RdmComPerinfo;
import incheon.res.rdm.dp.accept.mapper.RdmDpAcceptMapper;
import incheon.res.rdm.dp.accept.service.RdmDpAcceptService;
import incheon.res.rdm.dp.accept.vo.RdmDpAcceptVO;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;


@Service
public class RdmDpAcceptServiceImpl extends EgovAbstractServiceImpl implements RdmDpAcceptService {

	protected Log log = LogFactory.getLog(this.getClass());
	
	@Resource
    private RdmDpAcceptMapper rdmDpAcceptMapper;
	@Resource
    private RdmComMinwonService rdmComMinwonService;
	@Resource
	protected RdmComMsgnlogService rdmComMsgnlogService;
    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;
    @Resource(name = "minwonService")
    protected MinwonService minwonService;

	@Value("${rdm.com.minwon.cgg_mw_afr_cl_no}")
	private String cgg_mw_afr_cl_no;

    /*
    ///// 인천광역시 //////////
	public static final String SOWNN00212 = "SOWNN00212";
	
	public static final String SOWNN00215 = "SOWNN00215"; //민원사무번호 확인 (1)
	public static final String SOWNN00226 = "SOWNN00226"; //민원처리 기한 계산 (2)
	
	public static final String SOWNN00219 = "SOWNN00219";
	public static final String SOWNN00218 = "SOWNN00218";
	public static final String SOWNN00221 = "SOWNN00221";
	public static final String SOWNN00217 = "SOWNN00217";
	public static final String SOWNN00232 = "SOWNN00232";
	public static final String SOWNN00231 = "SOWNN00231";
	public static final String SOWNN00222 = "SOWNN00222";
    */
    
	/**
	 * @MethodDESC : 허가신청 접수 보완 관련
	 */
	@Override
	public int updateAcceptrepletion(RdmDpAcceptVO vo) throws Exception {
		
		int cnt = rdmDpAcceptMapper.updateAcceptrepletion(vo);
		
		return cnt;
	}

	@Override
	public int changeAcceptMngCde(RdmDpAcceptVO vo) throws Exception {
			
		int cnt = rdmDpAcceptMapper.changeAcceptMngCde(vo);
		
		return cnt;
	}

	@Override
	public int changeAcceptMngCdeDIPA(RdmDpAcceptVO vo) throws Exception {
		
		int cnt = rdmDpAcceptMapper.changeAcceptMngCdeDIPA(vo);
		
		return cnt;
	}

	/**
	 * @MethodDESC : 민원접수(새올연계) 국토부 형식
	 */
	@Override
	public String updateAcceptminwon(RdmDpAcceptVO vo) throws Exception {
		
		String message="succ";
		String rdhCde = "RDH201";

		LoginVO loginVO = RequestContext.getCurrentUser();
		String userAcntMngNo = loginVO.getUserUnqId();
		
		RdmComPerinfo rdmComPerinof = new RdmComPerinfo();
		BeanUtils.copyProperties(rdmComPerinof, vo);
		rdmComPerinof.setRoadDggPrcsStts(rdhCde);
		//개선추가
		rdmComPerinof.setUserAcntMngNo(userAcntMngNo);
		String mngCde = vo.getMngInstCd();
		String civNum = "";
		
		try{
			//민원사무정보 조회
			String cgg_mw_afr_cl_no = this.cgg_mw_afr_cl_no;

			Sownn00215outVO out215VO = minwonService.getOfficeInfo(cgg_mw_afr_cl_no,mngCde);

			//민원처리 기한 계산
			Sownn00226outVO out226VO = minwonService.getDayCount(out215VO,mngCde);

			//접수부서코드조회
			Sownn00220outVO out220VO = null;

			//확인(인천) : https://eminwon.namdong.go.kr/emwp/gov/mogaha/ntis/web/caf/mwwd/action/CafMwWdOpenAction.do?method=selectListMwOpn&menu_id=CAFOPNWebMwOpenL&jndinm=CafMwWdOpenEJB&methodnm=selectListMwOpn&context=NTIS
			// 민원사무명 : 도로점용허가
			//민원신청 접수
			Sownn00219outVO out219VO = minwonService.createMinwon(out215VO, out226VO, out220VO, rdmComPerinof,mngCde);

			//수령처리
			minwonService.updateReceive(out219VO,mngCde);

			//접수 확인
			minwonService.updateAccept(out219VO,mngCde);

			civNum = out219VO.getMw_take_no();
			
			log.info("민원접수번호(civNum) : "+civNum);
			
			if(civNum == null || "".equals(civNum)){
				throw new Exception("Empty civNum");
			}
			
			vo.setCvlcptRcptNo(civNum);
			vo.setRoadDggPrcsStts(rdhCde);
			//허가신청서 접수처리
			rdmDpAcceptMapper.updateAcceptminwon(vo);
			
		} catch(IllegalStateException e){
			log.error("시군구민원 등록 처리중 오류가 발생하였습니다.");
		}
		
		return message;
		 
	}
	
	/**
	 * @MethodDESC : 민원접수(새올연계X)
	 */
	@Override
	public String updateAcceptminwon2(RdmDpAcceptVO vo) throws Exception {
		
		String message="succ";
		String rdiIdn = vo.getRoadDggMngNo();

		LoginVO loginVO = RequestContext.getCurrentUser();
		String userAcntMngNo = loginVO.getUserUnqId();
		
		String civNum = "";
		vo.setCvlcptRcptNo(civNum);
		rdmDpAcceptMapper.updateAcceptminwon(vo);
		
		RdmComMinwonVO minwonVO = new RdmComMinwonVO();
		minwonVO.setRoadDggMngNo(rdiIdn);
		RdmComMinwonVO minwon = rdmComMinwonService.selectCggi(minwonVO);
		//시군구 민원신청연계 로그 정보 입력(RMT_CGGI_DT)
		SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");
		SimpleDateFormat tim = new SimpleDateFormat("HHmmss");
		Date currentTime = new Date();
		String strYmd = ymd.format(currentTime);
		String strTim = tim.format(currentTime);
		
		RdmComMinwonVO rdmComMinwonVO = new RdmComMinwonVO();
		rdmComMinwonVO.setRoadDggMngNo(rdiIdn);
		rdmComMinwonVO.setCvlcptRcptNo("");
		rdmComMinwonVO.setRcptYmd(strYmd);
		rdmComMinwonVO.setRcptHr(strTim);
		rdmComMinwonVO.setRcptInstCd("");
		rdmComMinwonVO.setRcptDeptCd("");
		rdmComMinwonVO.setRcptSe("");
		rdmComMinwonVO.setRcptUserId("");
		rdmComMinwonVO.setPrtcRlsYn("");
		rdmComMinwonVO.setCvlcptSeCd("");
		rdmComMinwonVO.setSggCffdnClsfCd("");
		rdmComMinwonVO.setCvlcptOutline("");
		rdmComMinwonVO.setPrcsPrnmntYmd("");
		rdmComMinwonVO.setPrcsPrnmntHr("");
		rdmComMinwonVO.setPrcsTermDayCnt("0");
		rdmComMinwonVO.setMaiyPrcsDeptCd("");
		rdmComMinwonVO.setAplcntSe("");
		rdmComMinwonVO.setAplcntRrno("");
		rdmComMinwonVO.setAplcntRrnoSn("");
		rdmComMinwonVO.setAplcntFlnm("");
		rdmComMinwonVO.setAplcntTelno("");
		rdmComMinwonVO.setAplcntAddr("");
		rdmComMinwonVO.setBzmnCorpNm("");
		rdmComMinwonVO.setZip("");
		rdmComMinwonVO.setAddrSe("");
		rdmComMinwonVO.setAplyIssuNocs("0");
		rdmComMinwonVO.setRcvmtFee("0");
		rdmComMinwonVO.setPrcsAmt("0");
		rdmComMinwonVO.setAplcntEml("");
		rdmComMinwonVO.setAplcntRlsPswd("");
		rdmComMinwonVO.setPrcsSe("");
		rdmComMinwonVO.setRcvMthd("");
		
		if(minwon == null){
			rdmComMinwonService.insertCggiDt(rdmComMinwonVO);
		}else{
			rdmComMinwonService.updateCggiDt(rdmComMinwonVO);
		}

		//도로굴착 로그
		RdmComMsgnlogVO msgLogVO = new RdmComMsgnlogVO();
		msgLogVO.setStateCde("RDH201");
		msgLogVO.setSeUserAcntMngNo(userAcntMngNo);
		msgLogVO.setRoadDggMngNo(vo.getRoadDggMngNo());
		msgLogVO.setRoadDggPrcsStts(vo.getRoadDggPrcsStts());
		rdmComMsgnlogService.insertDigMsgNLog2(msgLogVO);
		
		return message;
		 
	}

}