package incheon.uis.ucf.vo;

import java.io.Serializable;
import java.util.Date;

//import incheon.com.cmm.BaseVO;
import lombok.Getter;
import lombok.Setter;

/**
 * @Class Name : UisDefaultVO.java
 * @Description : UIS VO는 상속 필수
 * @Modification Information
 * @author 이재룡
 * @since 2025.09.02
 * @version 2.0.0
 * @see BaseVO
 *
 */
@Getter
@Setter
public class UisDefaultVO implements Serializable {

	private static final long serialVersionUID = 1L;

    /** typeId - 동적 처리를 위한 식별자 */
    private String typeId;

    /** typeGb - 동적 처리를 위한 식별자 */
    private String typeGb;

    /** 현재페이지 */
    private int pageIndex = 1;

    /** 페이지갯수 */
    private int pageUnit = 10;

    /** 페이지사이즈 */
    private int pageSize = 10;

    /** firstIndex */
    private int firstIndex = 0;

    /** lastIndex */
    private int lastIndex = 1;

    /** recordCountPerPage */
    private int recordCountPerPage = 10;
    
    // ===== 공통 감사 필드 =====
    // TODO: DefualtModel 로 가야할 것 같은데...!

    /**
     * 등록자 ID
     * 로그인 기능이 완성되면 실제 사용자 ID로 변경 예정
     */
    private String createdUser;

    /**
     * 등록 일시
     */
    private Date createdDate;

    /**
     * 최종 수정자 ID
     * 로그인 기능이 완성되면 실제 사용자 ID로 변경 예정
     */
    private String lastEditedUser;

    /**
     * 최종 수정 일시
     */
    private Date lastEditedDate;

    // ===== 공통 검증 메서드들 =====

    /**
     * 필수 필드 검증
     * VO 객체의 필수 필드가 올바르게 설정되었는지 검증
     */
    public boolean validateRequiredFields() {
        // 기본 구현 - 서브클래스에서 오버라이드하여 사용
        return true;
    }

    /**
     * 데이터 유효성 검증
     * VO 객체의 데이터가 비즈니스 규칙에 맞는지 검증
     */
    public boolean validateDataIntegrity() {
        // 기본 구현 - 서브클래스에서 오버라이드하여 사용
        return true;
    }

    /**
     * VO 객체의 문자열 표현을 반환
     * 디버깅 및 로깅 목적으로 사용
     *
     * @return VO 객체의 주요 필드 정보를 포함한 문자열
     */
    @Override
    public String toString() {
        return String.format("%s(createdUser=%s, createdDate=%s, lastEditedUser=%s, lastEditedDate=%s)",
                this.getClass().getSimpleName(),
                createdUser, createdDate, lastEditedUser, lastEditedDate);
    }


}