package common.controller;

import common.model.Menu;
import common.model.User;
import common.repository.UserRepository;
import common.service.MenuService;
import common.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import security.annotation.CurrentAccount;
import util.CipherUtil;
import util.ResultModel;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * Created by mxq on 2017/12/21.
 */
@Controller
@RequestMapping("system/user")
public class UserController {
    @Autowired
    private UserService userService;

    @Autowired
    UserRepository userRepository;


    @RequestMapping(value = "/create", method = RequestMethod.POST)
    @ResponseBody
    public ResultModel create(@CurrentAccount User loginAccount, @RequestBody User resource) {
        userService.create(loginAccount, resource);
        return ResultModel.OK();
    }

    @RequestMapping(value = "/update", method = RequestMethod.PUT)
    @ResponseBody
    public ResultModel update(@CurrentAccount User loginAccount, @RequestBody User resource) {
        userService.create(loginAccount, resource);
        return ResultModel.OK();
    }

    @RequestMapping(value = "/find", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel find(@CurrentAccount User loginAccount, @RequestBody User resource) {
        userService.create(loginAccount, resource);
        return ResultModel.OK();
    }

    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel delete(@CurrentAccount User loginAccount, @RequestBody User resource) {
        userService.create(loginAccount, resource);
        return ResultModel.OK();
    }

    @RequestMapping(value = "/update/name", method = RequestMethod.PUT)
    @ResponseBody
    public ResultModel updateName(@CurrentAccount User loginAccount, @RequestParam String name) {
        User login = userRepository.login(name);
        if(null == login){
            userService.updateName(loginAccount, name);
            return ResultModel.OK(true);
        }else{
            return ResultModel.OK(false);
        }

    }

    @RequestMapping(value = "/update/password", method = RequestMethod.PUT)
    @ResponseBody
    public ResultModel updatePwd(@CurrentAccount User loginAccount, @RequestParam String pwd, @RequestParam String oldpwd) {
        User login = userRepository.login(loginAccount.getEmail(), CipherUtil.generatePassword(oldpwd));
        if(null != login){
            userService.updatePwd(loginAccount, pwd);
            return ResultModel.OK(true);
        }else{
            return ResultModel.OK(false);
        }
    }

    //忘记密码时，修改密码
    @RequestMapping(value = "/update/pwd", method = RequestMethod.PUT)
    @ResponseBody
    public ResultModel updatePwd(@RequestParam String email, @RequestParam String pwd) {

        return ResultModel.OK(userService.updatePwd(email, pwd));
    }

    //忘记密码时，发送验证码
    @RequestMapping(value = "/code", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel sengCode(@RequestParam String email) {

        return ResultModel.OK(userService.sendCode(email));
    }

    //验证码验证
    @RequestMapping(value = "/update/pwd", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel validCode(@RequestParam String email, @RequestParam String code, @RequestParam String pwd) {
        return ResultModel.OK(userService.validCode(email, code, pwd));
    }
}
