package com.saas.voip.dto.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Request DTO for creating Retell agents.
 * Based on official Retell API v2 schema.
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CreateRetellAgentRequest {

    @NotBlank(message = "Agent name is required")
    @Size(min = 1, max = 255, message = "Agent name must be between 1 and 255 characters")
    @JsonProperty("agent_name")
    private String agentName;

    @NotBlank(message = "Agent description is required")
    @Size(min = 10, max = 1000, message = "Description must be between 10 and 1000 characters")
    private String description;

    @NotBlank(message = "LLM model is required")
    @JsonProperty("llm_model")
    private String llmModel;  // e.g., "gpt-4", "claude-3"

    @NotBlank(message = "System prompt is required")
    @Size(min = 10, max = 2000, message = "System prompt must be between 10 and 2000 characters")
    @JsonProperty("system_prompt")
    private String systemPrompt;

    @JsonProperty("begin_message")
    @Size(max = 1000, message = "Begin message cannot exceed 1000 characters")
    private String beginMessage;

    @NotNull(message = "Voice is required")
    private VoiceConfig voice;

    @JsonProperty("language_code")
    @Builder.Default
    private String languageCode = "en-US";

    @JsonProperty("enable_transcription")
    @Builder.Default
    private Boolean enableTranscription = true;

    @JsonProperty("enable_recording")
    @Builder.Default
    private Boolean enableRecording = true;

    @JsonProperty("max_duration_minutes")
    @Min(value = 1, message = "Max duration must be at least 1 minute")
    @Max(value = 60, message = "Max duration cannot exceed 60 minutes")
    @Builder.Default
    private Integer maxDurationMinutes = 30;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class VoiceConfig {
        
        @NotBlank(message = "Voice provider is required")
        private String provider;  // e.g., "11labs", "openai", "google"

        @NotBlank(message = "Voice ID is required")
        @JsonProperty("voice_id")
        private String voiceId;

        @JsonProperty("speed")
        @DecimalMin(value = "0.5")
        @DecimalMax(value = "2.0")
        @Builder.Default
        private Double speed = 1.0;
    }
}
