package com.cf.imes.framework.security.core;

import cn.hutool.core.map.MapUtil;
import com.cf.imes.framework.common.enums.UserTypeEnum;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 登录用户信息
 *
 * @author 晨丰科技
 */
@Data
public class LoginUser {

    /**
     * 用户编号
     */
    private Long id;
    /**
     * 用户类型
     *
     * 关联 {@link UserTypeEnum}
     */
    private Integer userType;
    /**
     * 组织编号
     */
    private Long organId;

    /**
     * 部门编号
     */
    private Long deptId;

    /**
     * 授权范围
     */
    private List<String> scopes;
    /**
     * 是否大型组织
     */
    private Boolean large;
    /**
     * 数据库编号
     */
    private Integer dbNo;
    /**
     * 数据表编号
     */
    private Integer tableNo;
    /**
     * 是否超级管理员
     */
    private Boolean isSupAdmin;
    // ========== 上下文 ==========
    /**
     * 上下文字段，不进行持久化
     *
     * 1. 用于基于 LoginUser 维度的临时缓存
     */
    @JsonIgnore
    private Map<String, Object> context;

    public void setContext(String key, Object value) {
        if (context == null) {
            context = new HashMap<>();
        }
        context.put(key, value);
    }

    public <T> T getContext(String key, Class<T> type) {
        return MapUtil.get(context, key, type);
    }

    /**
     * 数据源编码
     */
    private String dataCode;
    /**
     * 用户昵称
     */
    private String nickname;

    /**
     * 产品id
     */
    private Long productId;
}
