package incheon.com.file.vo;

import incheon.com.cmm.ComDefaultVO;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.time.LocalDateTime;

/**
 * 공통 파일 상세 VO
 * *
 * @since 2025.10.17
 */
@lombok.Getter @lombok.Setter
@EqualsAndHashCode(callSuper = true)
public class ComFileDtlVO extends ComDefaultVO {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 파일ID (ULID) */
    private String fileId;

    /** 파일그룹ID */
    private String atchFileId;

    /** 파일정렬순서 */
    private Integer fileSortSeq = 1;

    /** 원본파일명 */
    private String orgnlFileNm;

    /** 저장경로 */
    private String strgPathNm;

    /** 저장파일명 */
    private String strgFileNm;

    /** 파일크기(bytes) */
    private Long fileSz;

    /** MIME타입 */
    private String mimeTypeNm;

    /** 삭제여부 (Y:삭제, N:정상) */
    private String delYn = "N";

    /** 삭제실행일시 */
    private LocalDateTime delExcnDt;

    /** 최초등록자ID */
    private String frstRegId;

    /** 최초등록일시 */
    private LocalDateTime frstRegDt;

    /** 최종수정자ID */
    private String lastMdfcnId;

    /** 최종수정일시 */
    private LocalDateTime lastMdfcnDt;

    /** 파일 전체경로 (저장경로 + 저장파일명) */
    public String getFullStoragePath() {
        if (strgPathNm != null && strgFileNm != null) {
            // 경로 구분자 처리
            if (strgPathNm.endsWith("/") || strgPathNm.endsWith("\\")) {
                return strgPathNm + strgFileNm;
            } else {
                return strgPathNm + "/" + strgFileNm;
            }
        }
        return null;
    }

    /** 파일 확장자 추출 */
    public String getFileExtension() {
        if (orgnlFileNm != null && orgnlFileNm.contains(".")) {
            String[] parts = orgnlFileNm.split("\\.");
            return parts[parts.length - 1].toLowerCase();
        }
        return "";
    }
}