package cokr.xit.fims.crdn.web;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cokr.xit.base.code.CommonCode;
import cokr.xit.base.user.dao.UserMapper;
import cokr.xit.base.web.ApplicationController;
import cokr.xit.fims.cmmn.CmmnQuery;
import cokr.xit.fims.cmmn.ftp.RemoteSystemInfo;
import cokr.xit.fims.cmmn.service.bean.StngBean;
import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.fims.crdn.receive.eqpmnt.LayoutDescriptor;
import cokr.xit.fims.crdn.service.CrdnStngService;
import cokr.xit.fims.task.Task;
import cokr.xit.foundation.data.DataObject;

/**장비단속레이아웃 관리 서비스 웹 컨트롤러.<br />
 * {웹 컨텍스트}/crdn/crdn01 로 접근할 수 있다.
 * @author leebj
 */
@Controller
@RequestMapping(name="장비단속 레이아웃 설정 관리", value=Crdn01Controller.CLASS_URL)
public class Crdn01Controller extends ApplicationController {
	public static final String CLASS_URL = "/crdn/crdn01";

	public class METHOD_URL {
		public static final String
		linkFileLayoutMain = "/010/main.do",
		getLinkFileLayoutMetadataList = "/010/list.do",
		getLinkFileLayoutMetadataInfo = "/020/info.do",
		createLinkFileLayoutMetadata = "/020/create.do",
		updateLinkFileLayoutMetadata = "/020/update.do",
		removeLinkFileLayoutMetadata = "/020/remove.do"
		;
	}

	@Resource(name = "stngBean")
	private StngBean stngBean;
	@Resource(name = "userMapper")
	private UserMapper userMapper;
	@Resource(name = "crdnStngService")
	private CrdnStngService crdnStngService;

	/** 장비단속레이아웃 관리 메인화면을 연다.
	 * @return fims/crdn/crdn01010-main
	 */
	@RequestMapping(name="장비단속 레이아웃 설정 관리 메인", value=METHOD_URL.linkFileLayoutMain)
	public ModelAndView linkFileLayoutMain() {
		Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM002", "FIM003","FIM054");

		ModelAndView mav = new ModelAndView("fims/crdn/crdn01010-main")
			.addObject("pageName", "crdn01010")
			.addObject("FIM002List", commonCodes.get("FIM002"))
			.addObject("FIM003List", commonCodes.get("FIM003"))
			.addObject("FIM054List", commonCodes.get("FIM054"))
			.addObject("TaskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054")));
		return addCodes(commonCodes, mav, "FIM002", "FIM003");
	}

	/**장비단속 레이아웃 목록을 조회한다.<br />
	 * {@link CrdnStngService#getLinkFileLayoutMetadataList(CmmnQuery)} 참고
	 * @param query 장비단속 레이아웃 목록 조회 조건
	 * @return jsonView
	 */
	@Task
	@RequestMapping(name="장비단속파일 레이아웃 목록 조회", value=METHOD_URL.getLinkFileLayoutMetadataList)
	public ModelAndView getLinkFileLayoutMetadataList(CrdnQuery query) {
		setFetchSize(query.setSggCd(currentUser().getOrgID()));
		List<DataObject> list = crdnStngService.getLinkFileLayoutMetadataList(query);

		return setPagingInfo(new ModelAndView("jsonView"), list,"");
	}

	/**장비단속 레이아웃 상세정보를 조회한다.<br />
	 * @param query 장비단속 레이아웃 목록 조회 조건
	 * @return jsonView
	 */
	@Task
	@RequestMapping(name="장비단속파일 레이아웃 상세정보 조회", value=METHOD_URL.getLinkFileLayoutMetadataInfo)
	public ModelAndView getLinkFileLayoutMetadataInfo(HttpServletRequest hReq, String fileLayoutId) {
		DataObject info = !isEmpty(fileLayoutId) ? crdnStngService.getLinkFileLayoutMetadataInfo(fileLayoutId) : null;

		boolean json = jsonResponse();
		return new ModelAndView(json ? "jsonView" : "fims/crdn/crdn01020-info")
			.addObject("pageName", "crdn01020")
			.addObject("sggCd", currentUser().getOrgID())
			.addObject("layoutInfo", json ? info : toJson(info))
			.addObject("taskSeCd", hReq.getParameter("taskSeCd"));
	}

	/**장비단속파일 레이아웃을 등록한다.<br />
	 * @param
	 * @return jsonView
	 */
	@Task
	@RequestMapping(name="장비단속파일 레이아웃 등록", value=METHOD_URL.createLinkFileLayoutMetadata)
	public ModelAndView createLinkFileLayoutMetadata(LayoutDescriptor layoutDescriptor, RemoteSystemInfo remoteSystemInfo) {
		String rtnMsg = crdnStngService.createLinkFileLayoutMetadata(layoutDescriptor,remoteSystemInfo);
		return new ModelAndView("jsonView")
			.addObject("saved", rtnMsg.contains("[S]"));
	}

	/**장비단속파일 레이아웃을 수정한다.<br />
	 * @param
	 * @return jsonView
	 */
	@Task
	@RequestMapping(name="장비단속파일 레이아웃 수정", value=METHOD_URL.updateLinkFileLayoutMetadata)
	public ModelAndView updateLinkFileLayoutMetadata(LayoutDescriptor layoutDescriptor, RemoteSystemInfo remoteSystemInfo) {
		String rtnMsg = crdnStngService.updateLinkFileLayoutMetadata(layoutDescriptor,remoteSystemInfo);
		return new ModelAndView("jsonView")
			.addObject("saved", rtnMsg.contains("[S]"));
	}

	/**장비단속파일 레이아웃을 삭제한다.<br />
	 * @param fileLayoutId 파일 레이아웃 ID
	 * @return jsonView
	 */
	@Task
	@RequestMapping(name="장비단속파일 레이아웃 삭제", value=METHOD_URL.removeLinkFileLayoutMetadata)
	public ModelAndView removeLinkFileLayoutMetadata(String fileLayoutId) {
		String rtnMsg = crdnStngService.removeLinkFileLayoutMetadata(fileLayoutId);
		return new ModelAndView("jsonView")
			.addObject("saved", rtnMsg.contains("[S]"));
	}
}