package incheon.ags.dtad.web;

import incheon.ags.dtad.vo.DtadBizVO;
import incheon.ags.dtad.vo.DtadDtmVO;
import incheon.ags.dtad.vo.DtadGeoVO;
import incheon.ags.dtad.service.DtadService;
import incheon.ags.mrb.analysis.web.SpatialAnalysisController;
import incheon.com.security.vo.LoginVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.*;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 *  수치지형도 관리자 페이지
 */
@Controller
@RequestMapping("/ags/dtad")
@RequiredArgsConstructor
@Slf4j
public class agsDtadController {

    private static final Logger logger = LoggerFactory.getLogger(SpatialAnalysisController.class);
    private final DtadService dtadService;
	
	/**
	 * 사업정보관리 호출
	 * @return
	 */
	@GetMapping(value = {"/bizMgmt.do", "/main.do"})
	public String bizMgmt() {
		return "/ags/dtad/content/bizMgmt";
	}
	
	/**
	 * 사업정보관리 조회
	 * @return result
	 */
	@PostMapping(value = "/bizList.do", produces = "application/json")
	@ResponseBody
	public Map<String, Object> selectBizList(@RequestBody DtadBizVO param) {
		Map<String, Object> result = dtadService.selectBizList(param);
		return result;
	}
	
	/**
	 * 사업정보관리 등록
	 * @return result
	 */
	@PostMapping(value = "/insertBiz.do", produces = "application/json")
	@ResponseBody
	public String insertBiz(@RequestBody DtadBizVO param, HttpSession session) {
		LoginVO loginVO = (LoginVO) session.getAttribute("loginVO");
		int result = dtadService.insertBiz(param, session);
		if(result > 0) {
			return "success";
		} else {
			return "등록 중 오류가 발생했습니다. 다시 시도해주세요";
		}
	}
	
	/**
	 * 사업정보관리 수정
	 * @return result
	 */
	@PostMapping(value = "/updateBiz.do", produces = "application/json")
	@ResponseBody
	public String updateBiz(@RequestBody DtadBizVO param, HttpSession session) {
		try {
			dtadService.updateBiz(param, session);
			return "success";
		} catch (Exception e) {
			return "수정중 오류가 발생했습니다. 다시 시도해주세요.";
		}
	}
	
	/**
	 * 사업정보관리 삭제
	 * @return result
	 */
	@PostMapping(value = "/deleteBiz.do", produces = "application/json")
	@ResponseBody
	public String deleteBiz(@RequestBody DtadBizVO param) {
		int result = dtadService.deleteBiz(param);
		if(result > 0) {
			return "success";
		} else {
			return "삭제 중 오류가 발생했습니다. 다시 시도해주세요.";
		}
	}
	
	
	
	
	
	/**
	 * 수치지형도 등록관리 호출
	 * @return
	 */
	@GetMapping("/dtmMgmt.do")
	public String dtmMgmt() {
		return "/ags/dtad/content/dtmMgmt";
	}
	
	
	/**
	 * 수치지형도 등록관리 자료등록
	 * @return result
	 */
	@PostMapping(value = "/insertDtmFile.do", produces = "application/json")
	@ResponseBody
	public DtadDtmVO selectDtmFileList(@RequestBody DtadDtmVO param, HttpSession session) {
		String msg = "";
		param.setSuccecsTyp("N");
		if(param.getDupCheckYn().equals("Y")) {
			if(dtadService.selectDtmFileCount(param) > 0){
				msg = "해당 폴더의 자료중 이미 등록되어진 자료가 존재합니다. 다시 등록하기를 원하시면 관리자에게 문의 하십시오.";
				param.setMsg(msg);
				return param;
			}
		}
		
		if (dtadService.insertDtm(param,session) > 0) {
			param.setSuccecsTyp("Y");
		} else {
			param.setMsg("등록이 정상적으로 처리되지 않았습니다.");
		}

		return param;
	}
	
	
	/**
	 * 수치지형도 파일서버 조회
	 * @return result
	 */
	@PostMapping(value = "/dtmFile.do", produces = "application/json")
	@ResponseBody
	public List<DtadDtmVO> selectDtmFile(@RequestBody DtadDtmVO param) {
		return dtadService.selectDtmFileServer(param);
	}

	
	
	
	/**
	 * 공간정보자료 제공관리대장 호출
	 * @return
	 */
	@GetMapping("/geoData.do")
	public String geoData() {
		return "/ags/dtad/content/geoData";
	}
	
	/**
	 * 공간정보자료 제공관리대장 조회
	 * @return result
	 */
	@PostMapping(value = "/geoList.do", produces = "application/json")
	@ResponseBody
	public Map<String, Object> selectGeoList(@RequestBody DtadGeoVO param) {
		Map<String, Object> result = dtadService.selectGeoList(param);
		return result;
	}
	
	/**
	 * 공간정보자료 제공관리대장 등록
	 * @return result
	 */
	@PostMapping(value = "/insertGeo.do", produces = "application/json")
	@ResponseBody
	public String insertGeo(@RequestBody DtadGeoVO param, HttpSession session) {
		int result = dtadService.insertGeo(param, session);
		if(result > 0) {
			return "success";
		} else {
			return "등록 중 오류가 발생했습니다. 다시 시도해주세요";
		}
	}
	
	/**
	 * 공간정보자료 제공관리대장 수정
	 * @return result
	 */
	@PostMapping(value = "/updateGeo.do", produces = "application/json")
	@ResponseBody
	public String updateGeo(@RequestBody DtadGeoVO param, HttpSession session) {
		try {
			dtadService.updateGeo(param, session);
			return "success";
		} catch (Exception e) {
			return "수정중 오류가 발생했습니다. 다시 시도해주세요.";
		}
	}
	
	/**
	 * 공간정보자료 제공관리대장 삭제
	 * @return result
	 */
	@PostMapping(value = "/deleteGeo.do", produces = "application/json")
	@ResponseBody
	public String deleteGeo(@RequestBody DtadGeoVO param) {
		int result = dtadService.deleteGeo(param);
		if(result > 0) {
			return "success";
		} else {
			return "삭제 중 오류가 발생했습니다. 다시 시도해주세요.";
		}
	}
	
	
	/**
	 * 공간정보자료 제공관리대장 엑셀다운로드
	 * @return result
	 * @throws IOException 
	 */
	@PostMapping(value = "/geoExcel.do", produces = "application/json")
	@ResponseBody
	public Map<String, Object> geoExcel(@RequestBody DtadGeoVO param, HttpServletResponse response) throws IOException {
		param.setIsExcel(true);
		Map<String, Object> result = dtadService.selectGeoList(param);
		dtadService.downloadExcel(result, response);
		return result;
	}


}