package itn.let.sym.grd.web;

import java.util.List;

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

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.sym.grd.service.MberGrdService;
import itn.let.sym.grd.service.MberGrdVO;

@Controller
public class MberGrdController {

	@Resource(name = "mberGrdService")
	MberGrdService mberGrdService;

    /**
     * ########################################
     * 등급제 사용자 화면
     * ########################################
     */	
	
    /**
     * 마이페이지 등급제 누적결제액 세부내역
     * @param mjonMsgVO
     * @param model
     * @return	"/web/member/grd/MberGrdHistListAjax.do"
     * @throws Exception
     */
    @RequestMapping(value= {"/web/member/grd/mberGrdHistListAjax.do"})
    public String mberGrdHistListAjax(@ModelAttribute("searchVO") MberGrdVO mberGrdVO,
    		HttpServletRequest request,
    		ModelMap model) throws Exception{
    	
    	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
    	mberGrdVO.setMberId(userId);
    	
    	if(mberGrdVO.getPageUnit() != 10) {
    		mberGrdVO.setPageUnit(mberGrdVO.getPageUnit());
    	}
    	
    	/** pageing */
    	mberGrdVO.setPageUnit(3);
    	PaginationInfo paginationInfo = new PaginationInfo();
    	paginationInfo.setCurrentPageNo(mberGrdVO.getPageIndex());
    	paginationInfo.setRecordCountPerPage(mberGrdVO.getPageUnit());
    	paginationInfo.setPageSize(mberGrdVO.getPageSize());
    	
    	mberGrdVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
    	mberGrdVO.setLastIndex(paginationInfo.getLastRecordIndex());
    	mberGrdVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); 
    	
    	if("".equals(mberGrdVO.getSearchSortCnd())){ //최초조회시 최신것 조회List

    	}
    	
    	// 회원별 등급제 기간내, 최종결제이후 환불총금액
    	int refundSumAfterLastPay = mberGrdService.selectMberGrdRefundSum(mberGrdVO.getMberId());

    	List<MberGrdVO> mberGrdHistList =  mberGrdService.selectMberGrdHistByGrdDateList(mberGrdVO);
    	
    	paginationInfo.setTotalRecordCount(mberGrdHistList.size()> 0 ? mberGrdHistList.get(0).getTotCnt() : 0);
    	model.addAttribute("paginationInfo", paginationInfo);
    	model.addAttribute("mberGrdHistList", mberGrdHistList);
    	
    	model.addAttribute("grdSetNm", mberGrdVO.getGrdSetNm());
    	model.addAttribute("totAmt", mberGrdVO.getTotAmt());
    	model.addAttribute("refundSumAfterLastPay", refundSumAfterLastPay);
    	
    	return "/web/grd/MberGrdHistListAjax";
    }	
	
	// 등급제 시행 ON/OFF 체크(로그인 상태에서만 조회)
	@RequestMapping(value = "/web/grd/mberSettDetailAjax.do")
	public ModelAndView mberSettingDetailAjax(
			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {

		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
   	
		boolean isSuccess = false;
		String msg = "";
   		
        try{
        	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
        	if (null != loginVO) {
	        	MberGrdVO mberGrdVO1 = new MberGrdVO();
				mberGrdVO1 = mberGrdService.selectMberSettingDetail(mberGrdVO);
				if (mberGrdVO1.getGrdNoti().equals("Y")) {
	       			isSuccess = true;			
				}
        	}
		}
		catch(Exception e) {
			msg = e.getMessage();
		}		

		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}		
	
	// 등급제 시행 ON/OFF 체크(비로그인 상태에서 조회)
	@RequestMapping(value = "/web/grd/mberSettDetailByNotLoginAjax.do")
	public ModelAndView mberSettDetailByNotLoginAjax(
			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {

		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
   	
		boolean isSuccess = false;
		String msg = "";
		MberGrdVO rtnMberGrdVO = new MberGrdVO();
		
        try{
        	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
        	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
        	if (null != loginVO) {        
        		mberGrdVO.setMberId(userId);
        		
        		// Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)
	    		MberGrdVO mberGrdVO1 = new MberGrdVO();
	    		mberGrdVO1 = mberGrdService.selectMberSettingDetail(mberGrdVO);
	    		if (mberGrdVO1.getGrdNoti().equals("Y")) {
		        	// Step 2. 회원별 이벤트 진행여부
		        	int mberEventPrgCnt = mberGrdService.selectMberEventPrgCnt(mberGrdVO.getMberId());
		        	if (mberEventPrgCnt == 0) {
		           		rtnMberGrdVO = mberGrdService.selectMberGrdInfo(mberGrdVO.getMberId());
		           		if (null != rtnMberGrdVO) {
		           			isSuccess = true;
		           		}
		           		else {
		        			msg = "종료";       			
		           		}
		        	}	    			
	    		}        		
        	}
        	else {
	        	MberGrdVO mberGrdVO1 = new MberGrdVO();
				mberGrdVO1 = mberGrdService.selectMberSettingDetail(mberGrdVO);
				if (mberGrdVO1.getGrdNoti().equals("Y")) {
	       			isSuccess = true;			
				}
        	}
		}
		catch(Exception e) {
			msg = e.getMessage();
		}		

		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}		
	
	// 등급제 적용여부 체크
	@RequestMapping(value = "/web/grd/mberGrdChkAjax.do")
	public ModelAndView mberGrdChkAjax(
			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {

		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");

    	// 로그인VO에서  사용자 정보 가져오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

    	
		boolean isSuccess = false;
		String msg = "";
   		MberGrdVO rtnMberGrdVO = new MberGrdVO();
   		
        try{
        	if (StringUtils.isNotEmpty(userId)) {
	        	mberGrdVO.setMberId(userId);
	        	
	    		// Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)
	    		MberGrdVO mberGrdVO1 = new MberGrdVO();
	    		mberGrdVO1 = mberGrdService.selectMberSettingDetail(mberGrdVO);
	    		if (mberGrdVO1.getGrdNoti().equals("Y")) {
		        	// Step 2. 회원별 이벤트 진행여부
		        	int mberEventPrgCnt = mberGrdService.selectMberEventPrgCnt(mberGrdVO.getMberId());
		        	if (mberEventPrgCnt == 0) {
		           		rtnMberGrdVO = mberGrdService.selectMberGrdInfo(mberGrdVO.getMberId());
		           		if (null != rtnMberGrdVO) {
		           			isSuccess = true;
		           		}
		           		else {
		        			msg = "종료";       			
		           		}
		        	}	    			
	    		}
        	}
		}
		catch(Exception e) {
			msg = e.getMessage();
		}		

        modelAndView.addObject("rtnMberGrdVO", rtnMberGrdVO);
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}			
	
}
