package com.cloudcross.ssp.web.settings;

import java.util.Date;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cloudcross.ssp.back.model.User;
import com.cloudcross.ssp.back.service.IUserService;
import com.cloudcross.ssp.base.web.SimpleController;
import com.cloudcross.ssp.base.web.result.AjaxResult;
import com.cloudcross.ssp.common.utils.MD5;

/**
 * 账户信息设置功能。
 * 
 * @author qaohao
 */
@Controller
@RequestMapping("/settings/profile")
public class ProfileController extends SimpleController {
	@Autowired
	IUserService userService;

	/**
	 * 进入用户修改页面，根据用户名查询查询用户信息
	 * @param model 
	 * @return  用户信息修改页面
	 */
	@RequestMapping
	public String profile(Model model) {
		model.addAttribute("user", getLoginUser());
		return index;
	}

	/**
	 * 修改用户信息
	 * @param model
	 * @param user 页面输入的用户信息
	 * @param paramMap 页面参数
	 * @return 修改用户信息后，返回修改结果
	 */
	@RequestMapping("/save")
	public @ResponseBody AjaxResult save(Model model, @ModelAttribute("form") User user,
			@RequestParam Map<String, Object> paramMap) {

		//声明修改用户返回的结果
		AjaxResult result = new AjaxResult();
		
		// 根据用户名获得用户信息
		User userInfo = userService.findByUsername(user.getUsername());

		//修改用户信息时，用户ID ，状态与原用户保持一致
		user.setId(userInfo.getId());
		user.setStatus(userInfo.getStatus());
		
		//用户信息修改的时间
		user.setModifyDate(new Date());

		//用户需要修改密码时
		if (paramMap.get("isModifyPwd").equals("true")) {
			MD5 md5 = MD5.getInstance();
			String inputPwd = md5.getMD5(user.getPassword());
			
			//原密码输入错误
			if (!userInfo.getPassword().equals(inputPwd)) {
  				result.setMsg("原始密码输入不正确，请您重新输入");
  				result.setStatus("false");
				return result;
			}
			user.setPassword(md5.getMD5((String) paramMap.get("newPassword")));
		} else {
			//用户不需要改密码时，用户登录密码为原密码
			user.setPassword(userInfo.getPassword());
		}
		
		//修改用户信息
		boolean sign = userService.edit(user);
		
		//成功跳转到首页
		if (sign) {
			result.setStatus("ok");
			return result;
		}
		//失败返回当前页面，并提示
		result.setStatus("false");
		result.setMsg( "修改信息失败");
		return result;
	}

}
