package kcg.faics.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.faics.board.service.BoardService;
import kcg.faics.board.vo.BoardSearchVO;
import kcg.faics.board.vo.BoardVO;
import kcg.faics.report.service.ReportJudgeService;
import kcg.faics.report.vo.ReportSearchVO;
import kcg.faics.report.vo.ReportVO;
import kcg.faics.sec.LoginUserVO;
import kcg.faics.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;


/** 
 * 공용 컨트롤러.
 * 
 * CommonController.java
 * @author 임새미 
 * @since 2016. 10. 10.
 *
 *  	 수정일                     수정자                                       수정내용
 *  -------------	--------	---------------------------
 *  2016. 10. 10. 	    임새미				       최초생성
 * 
 */
@Controller
@SessionAttributes(types = LoginUserVO.class)
public class CommonController {

	/** 
	 * BoardService - 게시판 데이터처리에 관한 인터페이스.
	 **/
	@Resource(name = "boardService")
	private BoardService boardService;
	
	/**
	 * 견문 결재 인터페이스.
	 */
	@Resource(name = "reportJudgeService")
	private ReportJudgeService judgeService;	
	
	/**
	 * 로그인 화면으로 이동한다. 이미 로그인 되어 있을 경우, 메인페이지로 이동한다.
	 * 
	 * @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);
    		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(Integer.toString(loginUserVO.getType()));
    		reportSearchVO.setUserid(loginUserVO.getUserid());
    		//최근 1달치
    		Calendar mon = Calendar.getInstance();
    		mon.add(Calendar.MONTH, -1);
    		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);
    		
        /* 공지사항 리스트 */
        searchVO.setId("notice");
        List<BoardVO> noticeList = boardService.selectList(searchVO);
        model.addAttribute("noticeList", noticeList);

        /* 게시판 리스트 */
        searchVO.setId("bbs");
        List<BoardVO> bbsList = boardService.selectList(searchVO);
        model.addAttribute("bbsList", bbsList);

        /* 자료실 리스트 */
        searchVO.setId("data");
        List<BoardVO> dataList = boardService.selectList(searchVO);
        model.addAttribute("dataList", dataList);
			
        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";
	}
}
