package com.jang.doc.controller;

import javax.annotation.Resource;
import javax.validation.Valid;

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.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 JoinController {
	
	@Resource(name = "userService") //ÀÇÁ¸°ü°è ÁÖÀÔ
	private UserService userService; //ÀÇÁ¸°ü°è ¼³Á¤
	
	@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";
	}
}

}
