package com.rj.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * SiliconFlow TTS 响应DTO
 * 
 * @author rj
 * @date 2025-01-02
 */
@Data
public class SiliconFlowTtsResponse {
    
    /**
     * 音频数据（Base64编码）
     */
    @JsonProperty("audio")
    private String audio;
    
    /**
     * 音频格式
     */
    @JsonProperty("format")
    private String format;
    
    /**
     * 采样率
     */
    @JsonProperty("sample_rate")
    private Integer sampleRate;
    
    /**
     * 音频时长（秒）
     */
    @JsonProperty("duration")
    private Double duration;
    
    /**
     * 错误信息
     */
    @JsonProperty("error")
    private String error;
    
    /**
     * 错误代码
     */
    @JsonProperty("error_code")
    private String errorCode;
    
    /**
     * 请求ID
     */
    @JsonProperty("request_id")
    private String requestId;
    
    /**
     * 是否成功
     */
    private boolean success;
    
    /**
     * 错误消息
     */
    private String message;
    
    /**
     * MinIO访问URL
     */
    private String minioUrl;
    
    /**
     * 短链临时访问URL
     */
    private String shortUrl;
    
    /**
     * 短链过期时间
     */
    private LocalDateTime shortUrlExpireTime;
    
    /**
     * 构造函数
     */
    public SiliconFlowTtsResponse() {
    }
    
    /**
     * 创建成功响应
     * 
     * @param audio 音频数据
     * @param format 音频格式
     * @param sampleRate 采样率
     * @param duration 时长
     * @return 成功响应
     */
    public static SiliconFlowTtsResponse success(String audio, String format, Integer sampleRate, Double duration) {
        SiliconFlowTtsResponse response = new SiliconFlowTtsResponse();
        response.setSuccess(true);
        response.setAudio(audio);
        response.setFormat(format);
        response.setSampleRate(sampleRate);
        response.setDuration(duration);
        return response;
    }
    
    /**
     * 创建错误响应
     * 
     * @param error 错误信息
     * @param errorCode 错误代码
     * @return 错误响应
     */
    public static SiliconFlowTtsResponse error(String error, String errorCode) {
        SiliconFlowTtsResponse response = new SiliconFlowTtsResponse();
        response.setSuccess(false);
        response.setError(error);
        response.setErrorCode(errorCode);
        response.setMessage(error);
        return response;
    }
    
    /**
     * 创建错误响应
     * 
     * @param message 错误消息
     * @return 错误响应
     */
    public static SiliconFlowTtsResponse error(String message) {
        SiliconFlowTtsResponse response = new SiliconFlowTtsResponse();
        response.setSuccess(false);
        response.setMessage(message);
        return response;
    }
}
