package com.emotion.dto.request.coze;

import com.emotion.dto.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;

/**
 * Coze API调用记录创建请求
 * 
 * @author huazhongmin
 * @date 2025-09-08
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class CozeApiCallCreateRequest extends BaseRequest {

    /**
     * 对话ID
     */
    @NotBlank(message = "对话ID不能为空")
    private String conversationId;

    /**
     * 消息ID
     */
    private String messageId;

    /**
     * Coze聊天ID
     */
    private String cozeChatId;

    /**
     * Coze对话ID
     */
    private String cozeConversationId;

    /**
     * Bot ID
     */
    private String botId;

    /**
     * Workflow ID
     */
    private String workflowId;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 请求类型: chat/stream/retrieve/messages
     */
    private String requestType;

    /**
     * 请求URL
     */
    private String requestUrl;

    /**
     * 请求体
     */
    private String requestBody;

    /**
     * 请求头
     */
    private String requestHeaders;

    /**
     * 用户输入的消息内容
     */
    private String userMessage;

    /**
     * 用户消息类型: text/image/file
     */
    private String userMessageType;

    /**
     * AI回复的消息内容
     */
    private String aiReply;

    /**
     * AI回复类型: text/image/file
     */
    private String aiReplyType;

    /**
     * HTTP状态码
     */
    private Integer responseStatus;

    /**
     * 响应体
     */
    private String responseBody;

    /**
     * 响应头
     */
    private String responseHeaders;

    /**
     * 轮询次数
     */
    private Integer pollCount;

    /**
     * 轮询开始时间
     */
    private String pollStartTime;

    /**
     * 轮询结束时间
     */
    private String pollEndTime;

    /**
     * 最终状态: completed/failed/timeout
     */
    private String finalStatus;

    /**
     * 调用状态: pending/success/failed/timeout
     */
    private String status;

    /**
     * 开始时间
     */
    private String startTime;

    /**
     * 结束时间
     */
    private String endTime;

    /**
     * 耗时（毫秒）
     */
    private Integer durationMs;

    /**
     * 输入Token数
     */
    private Integer promptTokens;

    /**
     * 输出Token数
     */
    private Integer completionTokens;

    /**
     * 总Token数
     */
    private Integer totalTokens;

    /**
     * 费用
     */
    private BigDecimal cost;

    /**
     * 函数调用记录
     */
    private String functionCalls;

    /**
     * 函数调用结果
     */
    private String functionResults;

    /**
     * 错误代码
     */
    private String errorCode;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 客户端IP
     */
    private String clientIp;

    /**
     * 用户代理
     */
    private String userAgent;

    /**
     * 会话ID
     */
    private String sessionId;

    /**
     * 追踪ID
     */
    private String traceId;

    /**
     * 扩展元数据
     */
    private String metadata;
}