package kcg.imis.cmmn.web;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

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

import kcg.imis.board.service.BoardService;
import kcg.imis.board.vo.BoardSearchVO;
import kcg.imis.board.vo.BoardVO;
import kcg.imis.cmmn.service.CodeServiceImpl;
import kcg.imis.notice.service.NoticeService;
import kcg.imis.notice.vo.NoticeVO;
import kcg.imis.report.service.ReportJudgeService;
import kcg.imis.report.vo.ReportSearchVO;
import kcg.imis.report.vo.ReportVO;
import kcg.imis.sec.LoginUserVO;
import kcg.imis.sec.UserUtil;

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

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;


/**
  * @FileName : CommonController.java
  * @Project : 국제해양프로젝트
  * @Date : 2018. 3. 29. 
  * @작성자 : Moon
  * @변경이력 : 
  * @프로그램 설명 :
 */
@Controller
@SessionAttributes(types = LoginUserVO.class)
public class CommonController {

	@Resource(name = "codeService")
	private CodeServiceImpl codeService;
	
	@Resource(name = "reportJudgeService")
	private ReportJudgeService judgeService;
	
	@Resource(name = "boardService")
	private BoardService boardService;
	
	@Resource(name = "noticeService")
	private NoticeService noticeService;
	
	
	/**
	 * 로그인 화면으로 이동한다. 이미 로그인 되어 있을 경우, 메인페이지로 이동한다.
	 * 
	 * @param request Request 객체
	 * @param model Model 객체
	 * @return 로그인된 사용자 - 메인페이지, 로그인되지 않은 사용자 - 로그인화면
	 * @throws Exception 기본 예외 처리
	 */
    @RequestMapping("/loginView.do")
    public String loginView(final HttpServletRequest request, final Model model) throws Exception {
    	
    	if (EgovUserDetailsHelper.isAuthenticated()) {
    		return "redirect:/main.do";
    	} else {
    		String error = request.getParameter("error");
    		model.addAttribute("login_error", error);
    		model.addAttribute("code", codeService.getCodeList(null));
    		return "common/login";
    	}
    }
    
	/**
	 * 메인 화면으로 이동한다.
	 * 
	 * @param request Request 객체
	 * @param model Model 객체
	 * @return 메인페이지
	 * @throws Exception 기본 예외 처리
	 */
    @RequestMapping(value = "/main.do")
    public String actionMain(final HttpServletRequest request, final Model model) throws Exception {
    	if (EgovUserDetailsHelper.isAuthenticated()) {
    		BoardSearchVO searchVO = new BoardSearchVO();
    		searchVO.setRecordCountPerPage(5);
    		
    		/* 내실적 조회 리스트 */
    		LoginUserVO loginUserVO = UserUtil.getMemberInfo();
    		ReportSearchVO reportSearchVO = new ReportSearchVO();
    		reportSearchVO.setRecordCountPerPage(5);
    		reportSearchVO.setType(loginUserVO.getType());
    		reportSearchVO.setUserid(loginUserVO.getUserid());
    		
    		// 내 실적 조회 1년치 메인메뉴에서
    		Calendar mon = Calendar.getInstance();
    		mon.add(Calendar.MONTH, -12);
    		SimpleDateFormat stSdf = new SimpleDateFormat("yyyy-MM-dd");
    		String stDate = stSdf.format(mon.getTime());
    		
    		Date today = new Date();
    		SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
    		String enDate = date.format(today);
    		
    		reportSearchVO.setDateStart(stDate);
    		reportSearchVO.setDateEnd(enDate);
    		reportSearchVO.setOrderCol("in_seq");
    		reportSearchVO.setOrderAsc("DESC");
    		List<ReportVO> reportList = judgeService.selectMyList(reportSearchVO);
    		model.addAttribute("reportList", reportList);
    		
    		//내 실적 조회 최근 1달치
    		mon = Calendar.getInstance();
    		mon.add(Calendar.MONTH, -1);
    		stSdf = new SimpleDateFormat("yyyy-MM-dd");
    		stDate = stSdf.format(mon.getTime());
    		
    		today = new Date();
    		date = new SimpleDateFormat("yyyy-MM-dd");
    		enDate = date.format(today);
    		
    		/* 공지사항 리스트 */ 
    		searchVO.setBbsId("notice");
			List<BoardVO> noticeList = boardService.selectList(searchVO);
			model.addAttribute("noticeList", noticeList);

    		/* 국제회의 리스트 */
			searchVO.setBbsId("confer");
			List<BoardVO> bbsList = boardService.selectList(searchVO);
			model.addAttribute("conferList", bbsList);
			
    		/* 해양정세리포트 리스트 */
    		searchVO.setBbsId("report");
			List<BoardVO> dataList = boardService.selectList(searchVO);
			model.addAttribute("stateList", dataList);
			
			/* 공지팝업 목록 */
			List<NoticeVO> noticePopList = noticeService.selectNoticePopupList();
			model.addAttribute("noticePopList", noticePopList);
			
        	return "main.tiles";
        } else {
        	return "common/login";
        }
    }
	
	/**
	 * 권한이 없는 사용자가 접근시 권한제한 화면으로 이동한다.
	 * 
	 * @return 권한없음 페이지
	 * @exception Exception 기본 예외 처리
	 */
    @RequestMapping("/accessDenied.do")
    public String accessDenied() throws Exception {
        return "error/EgovAccessDenied";
    }
	
	/**
	 * validator 매핑.
	 * 
	 * @return 유효성 검사 코드 반환
	 * @exception Exception 기본 예외 처리
	 */
	@RequestMapping(value = "/validator.do")
	public String validator() {
		return "common/validator";
	}
}
