package kcg.faics.fa.web;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

import javax.annotation.Resource;

import kcg.faics.cmmn.excel.ExcelExporter;
import kcg.faics.cmmn.service.CodeService;
import kcg.faics.member.UserType;
import kcg.faics.member.service.MemberService;
import kcg.faics.member.vo.MemberVO;
import kcg.faics.sec.UserUtil;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import egovframework.rte.fdl.property.EgovPropertyService;

/** 
 * FaController.java
 * @author 임새미 
 * @since 2016. 11. 22.
 *
 *  	 수정일                     수정자                                       수정내용
 *  -------------	--------	---------------------------
 *  2016. 11. 22. 	    임새미				       최초생성
 * 
 */
@Controller
@RequestMapping("/fa")
public class FaController {

	@Resource(name = "propertiesService")
	private EgovPropertyService propertiesService;
	
	@Resource(name = "memberService")
	MemberService memberService;
	
	@Resource(name = "codeService")
	CodeService codeService;
	
	/**
	 * 외사경찰 정보를 반환한다.
	 * 
	 * @param memberVO 외사경찰 정보 객체
	 * @param model 모델 객체
	 * @return 외사경찰 정보 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping("/memberInfo.do")
	public String memberInfo(final MemberVO memberVO, final Model model) throws Exception {
		try {
			/* 외사경찰 */
			memberVO.setUsertype(UserType.FA);
			model.addAttribute("memberVO", memberService.select(memberVO));
			model.addAttribute("isAdmin", UserUtil.isAdmin());
			model.addAttribute("isSysAdmin", UserUtil.isSysAdmin());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return "fa/memberInfo.tiles";
	}
	
	/**
	 * 외사경찰 정원/현원현황을 반환한다.
	 * 
	 * @param model 모델 객체
	 * @return 외사경찰 정원/현원현황 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping("/memberManagePersonnel.do")
	public String memberManagePersonnel(final Model model) throws Exception {
		model.addAttribute("resultList", memberService.getCapacityManagement());
		return "fa/memberManagePersonnel.tiles";
	}
	
	/**
	 * 외사경찰 정원/현원현황을 반환한다.
	 * 
	 * @param model 모델 객체
	 * @return 외사경찰 정원/현원현황 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping("/memberManagePersonnelExcel.do")
	public String memberManagePersonnelExcel(final Model model) throws Exception {
		
		String title = "외사경찰 정원 및 현원 현황";
		
		List<HashMap<String, Object>> resultList = memberService.getCapacityManagement();
		
		LinkedHashMap<String, String> header = new LinkedHashMap<String, String>();
		header.put("CODENM", "구분");
		header.put("TOT_CNT", "전체 정원");
		header.put("CURRENT_CNT", "현재 정원");
		header.put("EXCESS", "과부족");
		header.put("POSITION204", "총경 정원");
		header.put("CNT_204", "총경 현원");
		
		header.put("POSITION203", "경정 정원");
		header.put("CNT_203", "경정 현원");
		
		header.put("POSITION202", "경감 정원");
		header.put("CNT_202", "경감 현원");
		
		header.put("POSITION201", "경위 정원");
		header.put("CNT_201", "경위 현원");
		
		header.put("POSITION104", "경사 정원");
		header.put("CNT_104", "경사 현원");
		
		header.put("POSITION103", "경장 정원");
		header.put("CNT_103", "경장 현원");
		
		header.put("POSITION102", "순경 정원");
		header.put("CNT_102", "순경 현원");
		
		model.addAttribute("excel", new ExcelExporter<HashMap<String, Object>>(header, resultList, title));
		model.addAttribute("filename", title);
		
		return "excelView";
	}
	
	/**
	 * 외사 경력 현황을 반환한다.
	 * 
	 * @param model 모델 객체
	 * @return 외사 경력 현황 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping("/memberCareerStatus.do")
	public String getCapacityManagement(final Model model) throws Exception {
		model.addAttribute("resultList", memberService.getCareerStatus());
		return "fa/memberCareerStatus.tiles";
	}
	
	/**
	 * 외사 경력 현황을 반환한다.
	 * 
	 * @param model 모델 객체
	 * @return 외사 경력 현황화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping("/getCapacityManagementExcel.do")
	public String getCapacityManagementExcel(final Model model) throws Exception {
		
		String title = "외사경찰 정원 및 현원 현황";
		
		List<HashMap<String, Object>> resultList = memberService.getCareerStatus();
		
		LinkedHashMap<String, String> header = new LinkedHashMap<String, String>();
		header.put("CODENM", "구분");
		header.put("TOT_CAREER", "계");
		header.put("CAREER", "과거외사경력");
		header.put("CAREER1", "수사경력");
		header.put("CAREER2", "정보경력");
		header.put("CAREER3", "보안경력");
		
		model.addAttribute("excel", new ExcelExporter<HashMap<String, Object>>(header, resultList, title));
		model.addAttribute("filename", title);
		
		return "excelView";
	}
	
	/**
	 * 외사 경력 차트을 반환한다.
	 * 
	 * @param model 모델 객체
	 * @return 외사 경력 현황화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping("/getCapacityManagementChart.do")
	public String getCapacityManagementChart(final Model model) throws Exception {
		// TODO: 차트화면 필요
		return "fa/memberCareerStatusStat.tiles";
	}
}
