package com.wyz.demo.service.impl;


import com.wyz.demo.dao.UserRepository;
import com.wyz.demo.dto.UserDTO;
import com.wyz.demo.po.UserPO;
import com.wyz.demo.service.UserService;
import com.wyz.demo.vo.Message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Service
@Slf4j
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;


    /**
     * 用户注册
     * @param userDTO
     * @param resp
     * @param sess
     * @return
     */
    @Override
    public Message addUser(UserDTO userDTO, HttpServletResponse resp, HttpSession sess) {

        log.info("请求注册的用户名是:{}",userDTO.getUsername());
        log.info("请求注册的密码是:{}",userDTO.getPassword());
        log.info("请求注册的手机号是:{}",userDTO.getPhone());

        Message msg = new Message();
        UserPO userPO = userRepository.getUserByUsername(userDTO.getUsername()); //判断用户名是否存在
        if(userPO!=null){
            msg.setFlag(-3);
            msg.setMsg("该用户名已经注册");
        }else{
            msg.setFlag(2);
            msg.setMsg("注册成功");


            // 在数据库中加一个用户
            UserPO u = new UserPO();
            u.setUsername(userDTO.getUsername());
            u.setPassword(userDTO.getPassword());
            u.setPhone(userDTO.getPhone());
            userRepository.addUser(u);

            // 创建一个session, 把Jsessionid发给前端。前端会跳回首页, 首页会负责查看有没有session
            sess.setAttribute("username",u.getUsername());
            Cookie cookie = new Cookie("JSESSIONID",sess.getId());
            resp.addCookie(cookie);
            
        }
        return msg;

    }


    /**
     * 判断用户可否登录
     * @param userDTO
     * @param sess
     * @return
     */
    @Override
    public Message checkUser(UserDTO userDTO, HttpServletResponse resp, HttpSession sess) {

        log.info("请求登录的用户名是:{}",userDTO.getUsername());
        log.info("请求登录的密码是:{}",userDTO.getPassword());

        Message msg = new Message();
        UserPO userPO = userRepository.getUserByUsername(userDTO.getUsername()); //判断用户名是否存在

        if(userPO == null){
            msg.setFlag(-1);
            msg.setMsg("用户不存在");
        }else if(!userDTO.getPassword().equals(userPO.getPassword())){
            msg.setFlag(-2);
            msg.setMsg("密码不正确");
        }else{
            msg.setFlag(1);
            msg.setMsg("登录成功");

            // 创建一个session, 把Jsessionid发给前端。前端会跳回首页, 首页会负责查看有没有session
            sess.setAttribute("username",userPO.getUsername());
            Cookie cookie = new Cookie("JSESSIONID",sess.getId());
            resp.addCookie(cookie);

        }

        return msg;
    }


    /**
     * 判断用户是否已经登录
     * @param sess
     * @return
     */
    @Override
    public Message checkStatus(HttpSession sess) {

        Message msg = new Message();
        if(sess.isNew()){
            msg.setFlag(-4);
            msg.setMsg("用户还未登录");
            sess.invalidate();
        }else{
            msg.setFlag(3);
            msg.setMsg("用户已经登录");
        }

        return msg;
    }
}
