package com.hzs.system.login.controller;

import javax.servlet.http.HttpServletRequest;

import com.hzs.common.core.enums.EDataSource;
import com.hzs.common.core.enums.ELoginType;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.system.login.service.IUserLoginService;
import com.hzs.system.sys.dto.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.hzs.common.auth.LoginBody;
import com.hzs.common.core.utils.JwtUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.security.auth.AuthUserUtil;
import com.hzs.common.security.service.UserTokenService;
import com.hzs.common.security.utils.SecurityUtils;

/**
 * 管理端 token 控制
 */
@RequestMapping("/auth/manage")
@RestController
public class UserTokenController {

    @Autowired
    private UserTokenService userTokenService;
    @Autowired
    private IUserLoginService iUserLoginService;

    /**
     * 用户登录
     *
     * @param form
     * @return
     */
    @PostMapping("/login")
    public AjaxResult login(@RequestBody LoginBody form,
                            @RequestHeader("Source") Integer source) {
        // 用户登录
        LoginUser loginUser = iUserLoginService.login(form.getUsername(), form.getPassword(), form.getSmsCode());

        if (EDataSource.H5.getValue().equals(source)
                && ELoginType.SUPPLIER.getValueInt().equals(loginUser.getLoginSysUser().getUserType())) {
            // 移动端 并且是 供应商 登录，则不允许进入系统
            return AjaxResult.error("目前只支持PC端登录操作");
        }

        // 获取登录token
        return AjaxResult.success(userTokenService.createToken(loginUser));
    }

    /**
     * 用户登出
     *
     * @param request
     * @return
     */
    @DeleteMapping("/logout")
    public AjaxResult logout(HttpServletRequest request) {
        String token = SecurityUtils.getToken(request);
        if (StringUtils.isNotEmpty(token)) {
            // 清除数据权限
            iUserLoginService.clearAccessPermissions(SecurityUtils.getUserId());

            // 删除用户缓存记录
            AuthUserUtil.logoutByToken(token);

            String userName = JwtUtils.getUserName(token);
            // 记录用户退出日志
            iUserLoginService.logout(userName);
        }
        return AjaxResult.success();
    }

//    /**
//     * 获取管理员是否登录短信验证
//     *
//     * @param userName 管理员编号
//     * @return
//     */
//    @GetMapping("/user-sms-check")
//    public AjaxResult userSmsCheck(@RequestParam String userName) {
//        SysUser sysUser = iSysUserService.selectUserByUserName(userName);
//        if (null != sysUser) {
//            // 0 需要短信校验，1 不需要短信校验
//            return AjaxResult.success("", sysUser.getSms());
//        }
//        return AjaxResult.error("登录用户不存在");
//    }

//    /**
//     * 管理员登录发送验证码
//     *
//     * @param userName 管理员编号
//     * @return
//     */
//    @RepeatSubmitSimple
//    @GetMapping("/user-sms-send")
//    public AjaxResult userSmsSend(@RequestParam String userName) {
//        SysUser sysUser = iSysUserService.selectUserByUserName(userName);
//        if (null != sysUser) {
//            if (iSmsService.sendLoginSms(sysUser.getPhonenumber(), EAliSmsTemplate.MANAGE_LOGIN)) {
//                return AjaxResult.success();
//            }
//            return AjaxResult.error("短信发送失败");
//        }
//        return AjaxResult.error("登录用户不存在");
//    }

}
