package tech.easyflow.auth.service.impl;

import cn.dev33.satoken.stp.SaLoginModel;

/**
 * 登录会话来源隔离策略。
 */
public final class AuthLoginSessionPolicy {

    /**
     * 人类用户 Web 会话设备类型。
     */
    public static final String WEB_DEVICE = "WEB";

    /**
     * 升级前未显式指定设备类型的历史 Web 会话设备类型。
     */
    public static final String LEGACY_WEB_DEVICE = "default-device";

    /**
     * API Key 机器会话设备类型。
     */
    public static final String API_KEY_DEVICE = "API_KEY";

    private AuthLoginSessionPolicy() {
    }

    /**
     * 构建 Web 登录模型。
     *
     * @return Web 登录模型
     */
    public static SaLoginModel webLoginModel() {
        return new SaLoginModel().setDevice(WEB_DEVICE);
    }

    /**
     * 构建 API Key 登录模型。
     *
     * @param timeoutSeconds 会话有效期秒数，可为空
     * @return API Key 登录模型
     */
    public static SaLoginModel apiKeyLoginModel(Long timeoutSeconds) {
        SaLoginModel loginModel = new SaLoginModel().setDevice(API_KEY_DEVICE);
        if (timeoutSeconds != null) {
            loginModel.setTimeout(timeoutSeconds);
        }
        return loginModel;
    }

    /**
     * 判断 Web 登录是否需要替换既有 Web 会话。
     *
     * @param multiLogin 是否允许账号多端登录
     * @return 禁止多端登录时返回 true
     */
    public static boolean shouldReplaceExistingWebSession(boolean multiLogin) {
        return !multiLogin;
    }
}
