package com.dbs.mplus.controller.mobile;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.dbs.mplus.exception.mobile.ApiCallException;
import com.dbs.mplus.exception.mobile.MobileControllerException;
import com.dbs.mplus.framework.exception.MPlusServiceException;
import com.dbs.mplus.framework.service.menu.ServiceMenu;
import com.dbs.mplus.framework.template.AbstractController;
import com.dbs.mplus.service.api.MPlusApi;
import com.dbs.mplus.service.api.MPlusApiCallService;

/**
 * 진료
 * 
 * @author seokhwan.chon
 *
 */
@Controller
@RequestMapping("/mobile/schedule")
@ServiceMenu(menuId="schedule", description="일정관리")
public class ScheduleController extends AbstractController {
	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	private MPlusApiCallService apiCallService;
	
	/**
	 * 검사실 부서 리스트 조회 - 의사, 간호사
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getSchExamDeptList.json", method = RequestMethod.POST)
	public Map<String, Object> getSchExamDeptList(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETSCHEXAMDEPTLIST , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}
	
	/**
	 * 진료과 부서 리스트 조회 - 의사, 간호사, 인턴
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getShcDeptList.json", method = RequestMethod.POST)
	public Map<String, Object> getShcDeptList(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETSHCDEPTLIST , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}
	
	/**
	 * 병동 부서 리스트 조회 - 의사, 간호사
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getShcWardList.json", method = RequestMethod.POST)
	public Map<String, Object> getShcWardList(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETSHCWARDLIST , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}
	
	/**
	 * 당직 일정 조회 - 의사, 간호사
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getOnDutyWeekSch.json", method = RequestMethod.POST)
	public Map<String, Object> getOnDutyWeekSch(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETONDUTYWEEKSCH , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}
	
	/**
	 * 개인 상세 당직 일정 조회 - 의사, 간호사
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getOnDutyMonthSch.json", method = RequestMethod.POST)
	public Map<String, Object> getOnDutyMonthSch(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETONDUTYMONTHSCH , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}
	
	/**
	 * 외래 진료 일정 조회
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getWorkSch.json", method = RequestMethod.POST)
	public Map<String, Object> getWorkSch(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETWORKSCH , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}
	
	/**
	 * 의료진 정보 조회
	 * 
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getDoctorInfo.json", method = RequestMethod.POST)
	public Map<String, Object> getDoctorInfo(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException {
		// 접근권한 및 파라미터 정리
		try {
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap);
			
		} catch (MPlusServiceException ex) {
			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
		
		// 20180612 shinsunwoo 세션에서 병원구분코드를 가져와서 추가함
		reqMap.put("hospitalCd", reqMap.get("mpUserHospital"));
		// 20190125 shinsunwoo user IP를 서비스 호출 파라미터로 전달하여, 서비스 로그에 출력하
		reqMap.put("userIP", com.dbs.mplus.framework.util.HttpRequestUtil.getClientIpAddr(request));

		// 실행
		try {
			return this.apiCallService.call(MPlusApi.SCHEDULE_GETDOCTORINFO , reqMap);
		} catch (ApiCallException ex) {
			if (this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex);
			}

			throw new MobileControllerException(ex.getCode(), ex.getMessage());
		}
	}

}
