package com.jang.doc.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.jang.doc.model.User;
import com.jang.doc.service.UserService;

@Controller
public class LoginController {
	
	@Resource(name = "userService")//@Autowired ÀÇÁ¸°ü°è ÁÖÀÔ
	private UserService userService; //ÀÇÁ¸°ü°è ¼³Á¤
	
	@RequestMapping(value="/login", method = RequestMethod.GET)
	public String gotoLoginView(Model model,HttpSession session) {
		model.addAttribute("user", new User());
		return "loginForm";
	}
		@RequestMapping ( value="/login", method = RequestMethod.POST)
		public String onSubmit(@ModelAttribute @Valid User user, BindingResult result, Model model, HttpSession session) {
			
			if (result.hasFieldErrors("id")||result.hasFieldErrors("pass")) {
				model.addAllAttributes(result.getModel());
				return "loginForm";
				
			}
			try {
				User loginUser = this.userService.getUser(user.getId());
				
				if(user.getPass().equals(loginUser.getPass())) {
					model.addAttribute("loginUser",loginUser);
					session.setAttribute("userid",loginUser.getId()); //¼¼¼Ç¿¡ º¯¼öµî·Ï
					session.setAttribute("userName",loginUser.getName());//¼¼¼Ç¿¡ º¯¼öµî·Ï 
					return "loginSuccess";
				}
				else {
					model.addAttribute("errMsg", "ÆÐ½º¿öµå°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.");
					return "loginForm";
				}
			}
			catch (EmptyResultDataAccessException e) {
				model.addAttribute("errMsg" , "»ç¿ëÀÚ°¡ µî·ÏµÇ¾îÀÖÁö ¾Ê½À´Ï´Ù.");
				return "loginForm";
			
			}
			
		
		}
		@RequestMapping(value="/edit", method = RequestMethod.GET) //"/edit"¶ó´Â URLÀÌ¶û ´ÙÀ½¿¡ ¿À´Â ÇÔ¼ö¶û ¸ÅÇÎ½ÃÅ´, GET¹æ½Ä 
		public String toUserEditView(@RequestParam("userId") String userId, Model model) {//modelÀº ºó°¡¹æ
			try {
				User loginUser = this.userService.getUser(userId);
				model.addAttribute("user", loginUser);
				return "editForm";
			}
			catch(EmptyResultDataAccessException e) {
				model.addAttribute("user", new User());
				model.addAttribute("errMsg","»ç¿ëÀÚ°¡ µî·ÏµÇ¾îÀÖÁö ¾Ê½À´Ï´Ù.");
				return "loginForm";
			}
		}
		
		@RequestMapping(value="/edit", method = RequestMethod.POST)
		public String onSumbit1( @Valid User user, BindingResult result, Model model)throws Exception {
			//System.out.println("");
			if (result.hasErrors()) {
				model.addAllAttributes(result.getModel());
				return "editFrom";
			}
			try {
				this.userService.updataUser(user);
				model.addAttribute("message","´ÙÀ½°ú °°ÀÌ »ç¿ëÀÚ Á¤º¸¸¦ ¼öÁ¤ÇÏ¿´½À´Ï´Ù.");
				model.addAttribute("user", user);
				return "joinSuccess";
			}
			catch (DataAccessException e) {
				model.addAttribute("errMsg","»ç¿ëÀÚÁ¤º¸ ¼öÁ¤¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.");
				return "editForm";
			
			}
		}
		@RequestMapping(value="/join.do", method = RequestMethod.GET) //"/join.do"¸¦ ´©¸£¸é È¸¿ø°¡ÀÔ ÆûÀ» ¶ç¿öÁÖ´Â °Í
		public String toUserEntryView(Model model) {
			model.addAttribute("user", new User()); 
			return "joinForm"; //
		}
		
		@RequestMapping(value ="/checkid.do", method = RequestMethod.GET)
		public String dupCheckId(@RequestParam("userId") String userId, Model model) {
			
			String message = "";
			int reDiv = 0; //returnDiv
			try {
				User loginUser = this.userService.getUser(userId);
				message ="ÀÌ¹Ì »ç¿ëµÈ ¾ÆÀÌµð ÀÔ´Ï´Ù.";
				reDiv = 0; //¾µ ¼ö ¾øÀ½
				userId="";
				
			}catch (EmptyResultDataAccessException e) { //¿¡·¯°¡ ³ª¸é
				message ="»ç¿ë °¡´ÉÇÑ ¾ÆÀÌµð ÀÔ´Ï´Ù.";
				reDiv = 1; //¾µ ¼ö ÀÖÀ½
			}
			model.addAttribute("user", new User());
			model.addAttribute("message", message);
			model.addAttribute("reDiv", reDiv);
			model.addAttribute("userId", userId);
			return "joinForm";
		}
		
		@RequestMapping(value="/join.do", method = RequestMethod.POST) //È¸¿ø°¡ÀÔ ¿Ï·á
		public String onSubmit(@Valid User user, BindingResult result, Model model)throws Exception {
		
			if(result.hasErrors()) {
				model.addAllAttributes(result.getModel());
				return "joinForm";
		} 
		
		try {
			this.userService.insertUser(user);
			model.addAttribute("message" ,"´ÙÀ½°ú °°ÀÌ È¸¿ø°¡ÀÔÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù.");
			model.addAttribute("user", user);
			return "joinSuccess";
			
		} catch (DataIntegrityViolationException e) {
			model.addAttribute("errMsg" , "È¸¿ø °¡ÀÔÀÌ ¿Ï·áµÇÁö ¸øÇÏ¿´½À´Ï´Ù. ´Ù½Ã ½ÃµµÇÏ¿© ÁÖ½Ê½Ã¿À.");
			return "joinForm";
		}
	}
		
		@RequestMapping(value="/findId_form.do", method = RequestMethod.GET)
		public String gotofindView(Model model,HttpSession session) {
			model.addAttribute("user", new User());
			return "findId";
		}
			@RequestMapping ( value="/findId_form.do", method = RequestMethod.POST)
			public String onSubmit2(@ModelAttribute @Valid User user, BindingResult result, Model model, HttpSession session) {
				
				if (result.hasFieldErrors("id")||result.hasFieldErrors("pass")) {
					model.addAllAttributes(result.getModel());
					return "findId";
					
				}
				try {
					User loginUser = this.userService.getUser(user.getId());
					
					if(user.getPass().equals(loginUser.getPass())) {
						model.addAttribute("loginUser",loginUser);
						session.setAttribute("userid",loginUser.getId()); //¼¼¼Ç¿¡ º¯¼öµî·Ï
						session.setAttribute("userName",loginUser.getName());//¼¼¼Ç¿¡ º¯¼öµî·Ï 
						return "findIdSuccess";
					}
					else {
						model.addAttribute("errMsg", "ÆÐ½º¿öµå°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.");
						return "findId";
					}
				}
				catch (EmptyResultDataAccessException e) {
					model.addAttribute("errMsg" , "»ç¿ëÀÚ°¡ µî·ÏµÇ¾îÀÖÁö ¾Ê½À´Ï´Ù.");
					return "findId";
				
				}

		
		
	}
}


