package com.kamco.cd.training.train.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.ZonedDateTime;
import java.util.UUID;
import lombok.Builder;
import lombok.Getter;

/** 학습 진행률 조회 응답 DTO */
@Getter
@Builder
public class TrainingProgressDto {

  // 기본 정보
  private Long jobId;
  private UUID modelUuid;
  private String statusCd; // QUEUED/RUNNING/SUCCESS/FAILED
  private String currentPhase; // 현재 단계 (계산된 값)
  private Double progressPercent; // 진행률 (0.00 ~ 100.00, 계산된 값)

  // Epoch 정보 (기존 DB 컬럼)
  private Integer currentEpoch; // 현재 Epoch
  private Integer totalEpoch; // 전체 Epoch

  // 시간 정보 (기존 DB 컬럼) - ISO 8601 형식으로 직렬화
  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
  private ZonedDateTime queuedDttm; // 큐 등록 시각

  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
  private ZonedDateTime startedDttm; // 시작 시각

  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
  private ZonedDateTime finishedDttm; // 종료 시각 (완료/실패 시)

  // 계산된 시간 정보
  private Long elapsedSeconds; // 경과 시간 (초)
  private Long estimatedRemainingSeconds; // 예상 남은 시간 (초)

  // 상태 메시지
  private String message; // 현재 상태 메시지 (계산된 값)

  // 에러 정보 (실패 시)
  private String errorMessage; // 에러 메시지 (기존 DB 컬럼)
}
