package com.kt.event.content.infra.gateway.client.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * Replicate API 응답 DTO
 *
 * 이미지 생성 결과
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReplicateResponse {

    /**
     * 예측 ID
     */
    @JsonProperty("id")
    private String id;

    /**
     * 모델 버전
     */
    @JsonProperty("version")
    private String version;

    /**
     * 상태: starting, processing, succeeded, failed, canceled
     */
    @JsonProperty("status")
    private String status;

    /**
     * 입력 파라미터
     */
    @JsonProperty("input")
    private Map<String, Object> input;

    /**
     * 출력 결과 (이미지 URL 리스트)
     */
    @JsonProperty("output")
    private List<String> output;

    /**
     * 에러 메시지 (실패시)
     */
    @JsonProperty("error")
    private String error;

    /**
     * 로그 메시지
     */
    @JsonProperty("logs")
    private String logs;

    /**
     * 메트릭 정보
     */
    @JsonProperty("metrics")
    private Metrics metrics;

    /**
     * 생성 시간
     */
    @JsonProperty("created_at")
    private String createdAt;

    /**
     * 시작 시간
     */
    @JsonProperty("started_at")
    private String startedAt;

    /**
     * 완료 시간
     */
    @JsonProperty("completed_at")
    private String completedAt;

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Metrics {
        /**
         * 예측 시간 (초)
         */
        @JsonProperty("predict_time")
        private Double predictTime;
    }
}
