package com.lesingle.common.util;

import com.lesingle.security.model.LoginUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * 安全工具类 - 获取当前登录用户信息
 */
public final class SecurityUtil {

    private SecurityUtil() {
    }

    /**
     * 获取当前登录用户
     */
    public static LoginUser getCurrentUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.getPrincipal() instanceof LoginUser loginUser) {
            return loginUser;
        }
        return null;
    }

    /**
     * 获取当前用户 ID（未登录返回 null）
     */
    public static Long getCurrentUserIdOrNull() {
        LoginUser user = getCurrentUser();
        return user != null ? user.getUserId() : null;
    }

    /**
     * 获取当前用户 ID（未登录抛异常）
     */
    public static Long getCurrentUserId() {
        LoginUser user = getCurrentUser();
        if (user == null) {
            throw new RuntimeException("用户未登录");
        }
        return user.getUserId();
    }

    /**
     * 获取当前用户名（未登录返回 "system"）
     */
    public static String getCurrentUsername() {
        LoginUser user = getCurrentUser();
        return user != null ? user.getUsername() : "system";
    }

    /**
     * 获取当前租户 ID（未登录返回 null）
     */
    public static Long getCurrentTenantId() {
        LoginUser user = getCurrentUser();
        return user != null ? user.getTenantId() : null;
    }

    /**
     * 当前用户是否为超级管理员
     */
    public static boolean isSuperAdmin() {
        LoginUser user = getCurrentUser();
        return user != null && user.isSuperAdmin();
    }
}
