package incheon.ags.ias.sysMenuAuthrt.vo;

import incheon.com.cmm.ComDefaultVO;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;

import java.time.LocalDateTime;

@Getter
@Setter
public class SysMenuAuthrtVO extends ComDefaultVO {
    // MENU_ROLE_AUTHRT_MPNG 테이블 필드 (필수)
    private String menuCd;           // PK - 메뉴 코드
    private String roleCd;           // PK - 역할 코드
    private String authrtCd;         // 권한 코드
    private String frstRegId;        // 최초 등록자 ID
    private String frstRegDt;        // 최초 등록 일시
    private String lastMdfcnId;      // 최종 수정자 ID
    private String lastMdfcnDt;      // 최종 수정 일시

    // 조회 조건용 (필터용)
    private String searchSysCd;      // 시스템 코드 (조회 필터용)
    private String searchRoleNm;      // 시스템 코드 (조회 필터용)
    private String searchMenuNm;     // 메뉴명 (조회 필터용)
    private String nowUserId;        // 현재 접속한 사용자 아이디

    // 조회 결과용 (SELECT JOIN 결과)
    private String sysCd;            // 시스템 코드
    private String sysNm;            // 시스템명
    private String menuNm;           // 메뉴명
    private String roleNm;           // 역할명
    private String authrtNm;         // 권한명
    private String authrtTypeCd;     // 권한 타입 코드
    private String authrtCdList;     // 권한 코드 목록 (GROUP_CONCAT 결과)
    private String authrtNmList;     // 권한명 목록 (GROUP_CONCAT 결과)
    private Integer authrtCnt;       // 권한 개수
    private Integer assignedUserCnt; // 할당된 사용자 수
    private Long rowNum;             // 행번호

    // 기타 메뉴 관련 필드
    private String upMenuCd;         // 상위 메뉴 코드
    private String upMenuNm;         // 상위 메뉴명
    private Integer menuSortSeq;     // 메뉴 순서
    private String thmbPathNm;       // 썸네일 이미지 경로
    private String thmbNm;           // 썸네일명
    private String useYn;            // 사용 여부
    private String menuUrlAddr;      // URL 경로
    private Integer level;           // 시스템 레벨
    private Boolean hasChildren;     // 하위 메뉴 유무
    private String sortPath;         // 정렬 경로

    // 기타 역할 관련 필드
    private String roleExpln;        // 역할 설명
    private String roleType;         // 역할 타입

    // 기타 권한 관련 필드
    private String authrtType;       // 권한 타입
    private String trgtSysCd;        // 타겟 시스템 코드
    private String trgtMenuCd;       // 타겟 메뉴 코드

    // 시스템 정보
    private LocalDateTime createDt;  // 생성 일자
    private LocalDateTime updtDt;    // 수정 일자
    private String rmrkCn;           // 비고

    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}
