package incheon.res.rdm.com.code.service.impl;

import incheon.com.cmm.context.RequestContext;
import incheon.com.security.vo.LoginVO;
import incheon.res.rdm.com.code.mapper.RdmComCodeMapper;
import incheon.res.rdm.com.code.service.RdmComCodeService;
import incheon.res.rdm.com.code.vo.RdmComCodeVO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.egovframe.rte.psl.dataaccess.util.EgovMap;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;


@Service
public class RdmComCodeServiceImpl extends EgovAbstractServiceImpl implements RdmComCodeService {

	protected Log log = LogFactory.getLog(this.getClass());

	@Resource
    private RdmComCodeMapper rdmComCodeMapper;

	/**
	 * @MethodDESC : 허가할 리스트
	 */
	@Override
	public List selectGuifList(String search) throws Exception {

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectGuifList(vo);

		if(search == null){
		}else if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setLclgvNm("전체");
			selectVO.setMngInstCd("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setLclgvNm("선택");
			selectVO.setMngInstCd("");
			list.add(0,selectVO);
		}

   		return list;
	}

	/**
	 * @MethodDESC : 년도 리스트
	 */
	@Override
	public List selectYearList(String search) throws Exception {

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectYearList(vo);


		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("전체");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("선택");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}

   		return list;
	}

	/**
	 * @MethodDESC : 향후 5개년도 리스트
	 */
	@Override
	public List selectUpYearList(String search) throws Exception {

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectUpYearList(vo);

		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("전체");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("선택");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}

   		return list;
	}

	/**
	 * @MethodDESC : 년도리스트(현재년도+1 ~ 현재년도-4)
	 */
	@Override
	public List selectPlanYearList(String search) throws Exception{

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectPlanYearList(vo);

		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("전체");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("선택");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}

   		return list;
	}

	/**
	 * @MethodDESC : 심의구분리스트
	 */
	@Override
	public List selectDbqList(String search) throws Exception {

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectDbqList(vo);


		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setDlbrQtrNm("전체");
			selectVO.setDlbrQtr("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setDlbrQtrNm("선택");
			selectVO.setDlbrQtr("");
			list.add(0,selectVO);
		}

   		return list;
	}

	/**
	 * @MethodDESC : 신청자 코드
	 */

	public List selectApplicantCodeList() throws Exception {

		List list = rdmComCodeMapper.selectApplicantCodeList();
		RdmComCodeVO selectVO = new RdmComCodeVO();
		selectVO.setCdNm("선택");
		selectVO.setWholCd("");
		list.add(0,selectVO);

   		return list;
	}

	/**
	 * @MethodDESC : 사용자 권한
	 */
	@Override
	public List selectApplicantCodeList(String search) throws Exception {
		List list = rdmComCodeMapper.selectApplicantCodeList();
		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setCdNm("전체");
			selectVO.setWholCd("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setCdNm("선택");
			selectVO.setWholCd("");
			list.add(0,selectVO);
		}
		return list;
	}

	/**
	 * @MethodDESC : 사벙계획 년도 리스트 (현재+1)
	 */
	@Override
	public List selectPlanYearList(RdmComCodeVO vo) throws Exception {
   		return rdmComCodeMapper.selectPlanYearList(vo);
	}

	/**
	 * @MethodDESC : 허가자 행정구역 가져오기
	 */
	@Override
	public List selectDocdList(String search) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();
		String mngCde = loginVO.getRoadMngInstCd();

		RdmComCodeVO vo = new RdmComCodeVO();
		vo.setMngInstCd(mngCde);

		List list = null;
		//기초자치단체: 광역시의 구, 도의 시&구
		if(mngCde.equals("0000")){
			list = rdmComCodeMapper.selectBjdList2(vo);
		}else{
			list = rdmComCodeMapper.selectBjdList1(vo);
		}

		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setStdgEmdNm("전체");
			selectVO.setStdgEmdCd("");
			list.add(0,selectVO);
		}

		return list;
	}

	/**
	 * @MethodDESC : 관할법정동 목록(허가청 다수)
	 */
	@Override
	public List selectBjdList1(RdmComCodeVO vo) throws Exception {
   		return rdmComCodeMapper.selectBjdList1(vo);
	}

	/**
	 * @MethodDESC : 체크코드 리스트
	 */
	@Override
	public List selectChkcdList(RdmComCodeVO vo) throws Exception {
   		List list = rdmComCodeMapper.selectChkcdList(vo);
   		RdmComCodeVO selectVO = new RdmComCodeVO();
		selectVO.setChkNam("선택");
		selectVO.setChkCde("");
		list.add(0,selectVO);

		return list;
	}

	/**
	 * @MethodDESC : 신청자 그룹 구분
	 */
	@Override
	public List selectApplicantGdiList(RdmComCodeVO vo) throws Exception {

		List list = rdmComCodeMapper.selectApplicantGdiList(vo);
		RdmComCodeVO selectVO = new RdmComCodeVO();
		selectVO.setCdNm("선택");
		selectVO.setWholCd("");
		list.add(0,selectVO);

   		return list;
	}

	/**
	 * @MethodDESC : 공무원을 제외한 유저 권한
	 */
	@Override
	public List selectAuthCodeWithoutPublicList() throws Exception {

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectAuthCodeWithoutPublicList(vo);
		RdmComCodeVO selectVO = new RdmComCodeVO();
		selectVO.setCdNm("선택");
		selectVO.setWholCd("");
		list.add(0,selectVO);

   		return list;
	}

	/**
	 * @MethodDESC : 내부협의기관등록을 위한 관리가관 목록 조회
	 */
	@Override
	public List selectMngExpList(RdmComCodeVO vo) throws Exception {
   		return rdmComCodeMapper.selectMngExpList(vo);
	}


	/**
	 * @MethodDESC : 업체업종(허가자를 제외한 나머지)
	 */
	@Override
	public List selectApplicantTobList(String search) throws Exception {
		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectApplicantTobList(vo);
		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setCdNm("전체");
			selectVO.setWholCd("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setCdNm("선택");
			selectVO.setWholCd("");
			list.add(0,selectVO);
		}
   		return list;
	}


	/**
	 * @MethodDESC : 년도 리스트
	 */
	@Override
	public List getYearList(String search) throws Exception {

		RdmComCodeVO vo = new RdmComCodeVO();
		List list = rdmComCodeMapper.selectYearList(vo);


		if("Y".equals(search)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("전체");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}else{
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setYyyNam("선택");
			selectVO.setYyyCde("");
			list.add(0,selectVO);
		}

   		return list;
	}


	/**
	 * @MethodDESC : 시 or 군 정보 가져오기
	 */
	@Override
	public List getGugunCode() throws Exception {

		List result = rdmComCodeMapper.selectGugunCodeList();

		if (result.size() == 0) {
			result = rdmComCodeMapper.selectGugunCodeList2();
		}

		return result;
	}

	/**
	 * @MethodDESC : 음면동 정보 가져오기
	 */
	@Override
	public List getHjdNameList() throws Exception {

		List result = new ArrayList();
		boolean flag = true;

		List sidoList = rdmComCodeMapper.selectGugunCodeList();

		if (sidoList.size() == 0) {
			flag = false;
			sidoList = rdmComCodeMapper.selectGugunCodeList2();
		}

		if (sidoList.size() != 0) {
			RdmComCodeVO vo = null;
			for (int i = 0; i < sidoList.size(); i++) {
				vo = new RdmComCodeVO();
				EgovMap map = (EgovMap) sidoList.get(i);

				vo.setStdgEmdCd((String)map.get("bjdCde"));
				vo.setStdgEmdNm((String)map.get("bjdNam"));

				if (flag) {
					result.addAll(rdmComCodeMapper.selectCodeList(vo));
				} else {
					result.addAll(rdmComCodeMapper.selectCodeList2(vo));
				}
			}
		}

		return result;
	}

	/**
	 * @MethodDESC : 리 정보 기져오기
	 */
	@Override
	public List getRiNameList() throws Exception {

		ArrayList result = new ArrayList();

		List dongList = this.getHjdNameList();

		if (dongList.size() != 0) {
			RdmComCodeVO vo = null;
			for (int i = 0; i < dongList.size(); i++) {
				vo = new RdmComCodeVO();
				EgovMap map = (EgovMap) dongList.get(i);

				vo.setVal((String)map.get("val"));
				vo.setStdgEmdCd((String)map.get("bjdCde"));
				vo.setRdNm((String)map.get("rdNm"));
				vo.setRiCde((String)map.get("riCde"));

				if ((vo.getRdNm() != null && vo.getRdNm().length() != 0) && (vo.getRiCde() != null && vo.getRiCde().length() != 0)) {
					result.addAll(rdmComCodeMapper.selectRiList(vo));
				}
			}
		}

		return result;
	}

	@Override
	public List getCodeList(String cdeSym, String tblNam, String ynn) throws Exception {
		RdmComCodeVO vo = new RdmComCodeVO();
		vo.setSmbolCd(cdeSym);
		vo.setUseTblNm(tblNam);
		List list = rdmComCodeMapper.getCodeList(vo);
		if("Y".equals(ynn)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setCdNm("전체");
			selectVO.setWholCd("");
			list.add(0,selectVO);
		}else if("N".equals(ynn)){
			RdmComCodeVO selectVO = new RdmComCodeVO();
			selectVO.setCdNm("선택");
			selectVO.setWholCd("");
			list.add(0,selectVO);
		}

   		return list;
	}


}