package incheon.com.security.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

/**
 * 사용자 권한 정보 VO
 * - 시스템별 권한을 구분하여 관리
 * - Spring Security Authority 변환 지원
 */
@Schema(description = "사용자 권한 정보")
@Getter
@Setter
public class UserAuthrtVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /** 시스템 코드 */
    @Schema(description = "시스템 코드 (AGS, SGP 등)")
    private String sysCd;

    /** 권한 코드 */
    @Schema(description = "권한 코드")
    private String authrtCd;

    /** 권한명 */
    @Schema(description = "권한명")
    private String authrtNm;

    /** 권한 유형 (REGULAR: 정규, TEMP: 임시) */
    @Schema(description = "권한 유형 (REGULAR: 정규, TEMP: 임시)")
    private String authrtType;

    /** 부여된 역할 코드 */
    @Schema(description = "권한을 부여한 역할 코드")
    private String fromRoleCd;

    /** 적용 범위 (SYS: 시스템 전체, MENU: 특정 메뉴) */
    @Schema(description = "적용 범위 (SYS: 시스템, MENU: 메뉴)")
    private String scope;

    /** 대상 코드 (메뉴 코드 등) */
    @Schema(description = "대상 코드 (메뉴 코드 또는 시스템 코드)")
    private String trgtCd;

    /**
     * Spring Security Authority 문자열 생성
     * 형식: "시스템코드:권한코드" (예: "AGS:PERM_FUNC_EDIT")
     *
     * @return Spring Security에서 사용할 Authority 문자열
     */
    public String toAuthority() {
        return sysCd + ":" + authrtCd;
    }
}
