package com.mca.cmmn.web;

import java.util.List;

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

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

import com.mca.cmmn.service.AreaCodeService;
import com.mca.user.service.UserService;
import com.mca.user.vo.UserVO;

import egovframework.rte.fdl.property.EgovPropertyService;

@Controller
public class CommonController {
	
	
	/**
	 * properties값을 가져오는 인터페이스.
	 **/
	@Resource(name="propertiesService")
	private EgovPropertyService propertiesService;
	
	@Resource(name="userService")
	private UserService userService;
	
	@Resource(name="areaCodeService")
	private AreaCodeService areaCodeService;
	
	
	/**
	 * 로그인 화면을 반환한다.
	 * 
	 * @param error 로그인 실패정보
	 * @param fail 사용자 인증정보
	 * @return 로그인화면 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping(value="/login")
	public String login(String error, String fail, Model model) throws Exception{
		try {
			if(error != null) {
				model.addAttribute("errMsg", "접속자 정보를 찾을 수 없습니다.");
			}
			if(fail != null) {
				model.addAttribute("errMsg", "승인 처리중입니다.");
			}
			return "login";
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return "error/EgovServerError";
		}
	}
	
	/**
	 * 로그아웃처리를 한다
	 * 
	 * @param session 세션 객체
	 * @param model 모델 객체
	 * @return 로그인 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping(value="/logout")
	public String logout(HttpSession session, Model model) throws Exception {
		try {
			session.removeAttribute("id");
			session.removeAttribute("admin");
			model.addAttribute("url", "/");
			model.addAttribute("resultMsg", "로그아웃 되었습니다.");
			return "/redirect";
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return "error/EgovServerError";
		}
	}
	
	/**
	 * 회원가입 화면을 반환한다.
	 * @return 회원가입 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping(value="/join")
	public String join() throws Exception {
		try {
			return "anonymous/html/join";
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return "error/EgovServerError";
		}
	}
	
	/**
	 * 아이디 중복 체크를 한다.
	 * @param checkId 입력 아이디값
	 * @return 성공, 실패 여부
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping(value="/userIdCheck")
	@ResponseBody
	public String checkId(@RequestParam("checkId")String checkId) throws Exception {
		try {
			int cnt = userService.selectUserIdCheck(checkId);
			if(cnt > 0) {
				return "duplicate";	
			}else {
				return "ok";
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return "error/EgovServerError";
		}
	}
	
	/**
	 * 사용자 등록 처리를 한다.
	 * @param userVO 사용자정보 VO
	 * @param model 모델 객체
	 * @return 로그인 화면
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping(value="/insertUser")
	public String userInsert(@ModelAttribute("userVO") UserVO userVO, Model model) throws Exception {
		try {
			int result = userService.insertUser(userVO);
			if(result == 0) {
				model.addAttribute("url", "/");
				model.addAttribute("resultMsg", "회원가입이 완료 되었습니다. 승인을 기다려주세요.");
				return "/redirect";
			}else {
				model.addAttribute("resultMsg", "오류가 발생하였습니다.");
				return null;
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return "error/EgovServerError";
		}
	}
	
	/**
	 * 지역 리스트 가져온다.
	 * @param code 법정동 코드
	 * @param area 지역이름
	 * @return 선택된 지역 리스트
	 * @throws Exception 기본 예외 처리
	 */
	@RequestMapping(value="/selectAreaList")
	@ResponseBody
	public List<?> selectAreaList(@RequestParam("code")String code, @RequestParam("area")String area) throws Exception {
		List<?> countyList = areaCodeService.selectCounty(code, area);
		return countyList;
	}
	
	/**
	 * 권한이 없는 사용자가 접근시 권한제한 화면으로 이동한다.
	 * 
	 * @return 권한없음 페이지
	 * @exception Exception 기본 예외 처리
	 */
    @RequestMapping("/error/EgovAccessDenied")
    public String accessDenied() throws Exception {
        return "error/EgovAccessDenied";
    }
// 아이디 찾기 페이지 이동
    @RequestMapping(value = "findId")
	public String findIdView(){

    	return "anonymous/findId";
	}
	// 아이디 찾기 실행

	@RequestMapping(value = "findId", method = RequestMethod.POST)
	public String findIdAction(UserVO userVO, Model model) {
    	UserVO user = userService.findId(userVO);

		if (user == null) {
			model.addAttribute("check", 1);
		} else {
			model.addAttribute("check", 2);
			model.addAttribute("id", user.getUserid());
		}

    	return "anonymous/findId";

	}
	//pw찾기 페이지 이동
	@RequestMapping(value = "findPwd")
	public String findPwdView(){
    	return "anonymous/findPwd";
	}
	//pw찾기 실행
	@RequestMapping(value = "findPwd", method = RequestMethod.POST)
	public String findPwdAction(UserVO userVO, Model model){
    	UserVO user = userService.findPwd(userVO);

		if (user == null) {
			model.addAttribute("check", 1);
		} else {
			model.addAttribute("check", 0);
			model.addAttribute("updateid", user.getUserid());
		}
    	return "anonymous/findPwd";
	}

	//pw 바꾸기 실행
	@RequestMapping(value = "updatepwd", method = RequestMethod.POST)
	public String updatePwdAction(@RequestParam(value = "updateid", defaultValue = "", required = false) String id, UserVO userVO) {

		userVO.setUserid(id);
		System.out.println(userVO);
		userService.updatePwd(userVO);
		return "anonymous/findPwdConfirm";
	}

	// 비밀번호 변경 성공페이지 이동
	public String CheckPwd(HttpSession session, Model model){
    	UserVO loginUser = (UserVO) session.getAttribute("loginUser");

		if (loginUser == null) {
			return "/login";
		} else {
			return "checkform";
		}
	}

}