package org.itat.message.action;
import java.io.UnsupportedEncodingException;
import javax.annotation.Resource;
import org.apache.struts2.ServletActionContext;
import org.itat.message.iservice.IUserService;
import org.itat.message.util.ActionUtil;
import org.itat.message.vo.User;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven<User>{
	private static final long serialVersionUID = -1831131402578214891L;
	private User user;
	private IUserService userService;
	private String confirmPwd;
	private String oldPwd;
	
	public String getOldPwd() {
		return oldPwd;
	}
	public void setOldPwd(String oldPwd) {
		this.oldPwd = oldPwd;
	}
	public String getConfirmPwd() {
		return confirmPwd;
	}
	public void setConfirmPwd(String confirmPwd) {
		this.confirmPwd = confirmPwd;
	}
	public IUserService getUserService() {
		return userService;
	}
	@Resource
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	public User getModel() {
		if(user==null) user = new User();
		return user;
	}
	
	
	public String addInput() {
		return Action.SUCCESS;
	}
	
	public String add() {
		user.setHiddenMsg(0);
		user.setStatus(0);
		user.setType(1);
		userService.add(user);
		ActionContext.getContext().put("urlAction", "user_loginInput.action");
		return ActionUtil.REDIRECT;
	}
	
	public void validateAdd() {
		checkUsernameAndPassword();
		if(!user.getPassword().equals(confirmPwd)) {
			this.addFieldError("confirmPwd","两次输入的密码不正确!");
		}
	}
	
	public String updatePasswordInput() {
		return SUCCESS;
	}
	
	public String updatePassword() {
		User tu = userService.load(user.getId());
		if(!tu.getPassword().equals(oldPwd)) {
			this.addFieldError("password","原始密码不正确");
			return INPUT;
		}
		tu.setPassword(user.getPassword());
		userService.update(tu);
		ActionContext.getContext().put("urlAction", "message_list.action");
		return ActionUtil.REDIRECT;
	}
	
	public String loginInput() {
		return Action.LOGIN;
	}
	
	public String login() {
		User loginUser = userService.login(user.getUsername(), user.getPassword());
		ActionContext.getContext().getSession().put("loginUser",loginUser);
		ActionContext.getContext().put("urlAction", "message_list.action");
		return ActionUtil.REDIRECT;
	}
	
	public String list() throws UnsupportedEncodingException {
		ServletActionContext.getRequest().setCharacterEncoding("UTF-8");
		ActionContext.getContext().put("pages", userService.find(user.getUsername()));
		return SUCCESS;
	}
	
	public String show() {
		User u = userService.load(user.getId());
		ActionContext.getContext().put("user", u);
		return SUCCESS;
	}
	
	public void validateLogin() {
		checkUsernameAndPassword();
	}
	
	public String logout() {
		ActionContext.getContext().getSession().remove("loginUser");
		ActionContext.getContext().put("urlAction", "user_loginInput.action");
		return ActionUtil.REDIRECT;
	}
	
	private void checkUsernameAndPassword() {
		if(user.getUsername()==null||"".equals(user.getUsername().trim())) {
			this.addFieldError("username","用户名不能为空");
		}
		if(user.getPassword()==null||"".equals(user.getPassword().trim())) {
			this.addFieldError("password","用户名密码不能为空");
		}
	}
	
	public String authError() {
		return SUCCESS;
	}
}