package com.ssyf.common.security.helper;

import cn.dev33.satoken.stp.SaLoginConfig;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.jwt.JWTUtil;
import com.ssyf.common.security.domain.ClientInfo;


/**
 * 登录帮助类
 * @author huwei
 * @date 2023/11/5 20:35
 */
public class LoginHelper {

    /**
     * 登录
     * @param clientInfo
     */
    public static void login(ClientInfo clientInfo){
        //设置秘钥
        if(StrUtil.isBlank(clientInfo.getDys())){
            clientInfo.setDys(createDynamicById(clientInfo.getId()));
        }
        //设置属性值
        SaLoginModel saLoginModel = SaLoginConfig.create();
        BeanUtil.beanToMap(clientInfo).entrySet().forEach(entry->{
            if(entry.getValue() == null){
                return;
            }
            saLoginModel.setExtra(entry.getKey() ,entry.getValue());
        });
        StpUtil.login(clientInfo.getId() ,saLoginModel);
    }

    /**
     * 解析并获取客户信息，从当前登录信息中
     * @return
     */
    public static ClientInfo parseAndGetFormCurrentLogin(){
        return parseAndGet(StpUtil.getTokenValue());
    }

    /**
     * 是否登录
     * @return
     */
    public static boolean isLogin(){
        return StpUtil.isLogin();
    }

    /**
     * 解析数据
     * @param token
     * @return
     */
    public static ClientInfo parseAndGet(String token){
        return JWTUtil.parseToken(token).getPayloads().toBean(ClientInfo.class);
    }

    /**
     * 创建动态秘钥
     * @param id
     * @return
     */
    public static String createDynamicById(Object id){
        return IdUtil.simpleUUID().substring(16);
    }

}
