package com.zioinfo.mes.common;

import org.springframework.security.core.Authentication;

import java.util.Set;

/**
 * 컨트롤러 공통 — Authentication 에서 actor(username)/role 추출 + MANAGER+ 가드.
 *
 * <p>기준정보 마감·승인 등 MANAGER 이상만 허용하는 작업은 {@link #requireManager}로 추가 가드한다
 * (SecurityConfig 의 URL 매칭은 WORKER+까지 허용하므로 메서드 레벨 보강).
 */
public final class AuthSupport {

    private static final Set<String> MANAGER_ROLES = Set.of("MANAGER", "SUPERADMIN");

    private AuthSupport() {
    }

    public static String actor(Authentication a) {
        return a != null ? a.getName() : "system";
    }

    public static String role(Authentication a) {
        if (a == null || a.getAuthorities().isEmpty()) return "VIEWER";
        String r = a.getAuthorities().iterator().next().getAuthority();
        return r.startsWith("ROLE_") ? r.substring(5) : r;
    }

    /** MANAGER 이상이 아니면 예외(기준정보/마감/승인 가드). */
    public static void requireManager(Authentication a) {
        if (!MANAGER_ROLES.contains(role(a).toUpperCase())) {
            throw new RuntimeException("ERR-MES-403: 기준정보/마감/승인은 MANAGER 이상만 가능합니다");
        }
    }
}
