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.util.Map;

/**
 * Replicate API 요청 DTO
 *
 * Stable Diffusion 이미지 생성 요청
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReplicateRequest {

    /**
     * 사용할 모델 버전
     *
     * Stable Diffusion XL 1.0:
     * "stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea535525255b1aa35c5565e08b"
     */
    @JsonProperty("version")
    private String version;

    /**
     * 모델 입력 파라미터
     */
    @JsonProperty("input")
    private Input input;

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Input {
        /**
         * 이미지 생성 프롬프트
         */
        @JsonProperty("prompt")
        private String prompt;

        /**
         * 네거티브 프롬프트 (제외할 요소)
         */
        @JsonProperty("negative_prompt")
        private String negativePrompt;

        /**
         * 이미지 너비 (default: 1024)
         */
        @JsonProperty("width")
        private Integer width;

        /**
         * 이미지 높이 (default: 1024)
         */
        @JsonProperty("height")
        private Integer height;

        /**
         * 생성할 이미지 수 (default: 1)
         */
        @JsonProperty("num_outputs")
        private Integer numOutputs;

        /**
         * Guidance scale (default: 7.5)
         * 높을수록 프롬프트에 더 충실
         */
        @JsonProperty("guidance_scale")
        private Double guidanceScale;

        /**
         * 추론 스텝 수 (default: 50)
         * 높을수록 품질 향상, 시간 증가
         */
        @JsonProperty("num_inference_steps")
        private Integer numInferenceSteps;

        /**
         * 랜덤 시드 (재현성을 위해 사용)
         */
        @JsonProperty("seed")
        private Long seed;
    }
}
