package tech.easyflow.ai.easyagentsflow.upload;

import java.util.ArrayList;
import java.util.List;

/**
 * Public Workflow API 临时上传记录。
 */
public class WorkflowApiUploadRecord {

    /** 服务端生成、用于 Redis 和对象存储定位的内部上传 ID。 */
    private String uploadId;
    /** 调用方可见、用于跨线程排障的 HTTP 请求关联标识。 */
    private String requestId;
    private String executeId;
    private List<WorkflowApiStoredFile> storedFiles = new ArrayList<>();
    /**
     * 兼容早期临时上传记录的旧版路径；新记录使用 {@link #storedFiles}。
     */
    private List<String> filePaths = new ArrayList<>();
    private long createdAt;
    private long cleanupAt;

    /**
     * 获取内部上传 ID。
     *
     * <p>兼容旧版 Redis 记录：旧记录只包含 {@code requestId}，
     * 其值曾作为内部上传主键。</p>
     *
     * @return 内部上传 ID
     */
    public String getUploadId() {
        return uploadId == null || uploadId.isBlank()
                ? requestId
                : uploadId;
    }

    /**
     * 设置内部上传 ID。
     *
     * @param uploadId 内部上传 ID
     */
    public void setUploadId(String uploadId) {
        this.uploadId = uploadId;
    }

    /**
     * 获取 HTTP 请求关联标识。
     *
     * @return HTTP 请求关联标识
     */
    public String getRequestId() {
        return requestId;
    }

    /**
     * 设置 HTTP 请求关联标识。
     *
     * @param requestId HTTP 请求关联标识
     */
    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }

    /**
     * 获取工作流执行 ID。
     *
     * @return 工作流执行 ID
     */
    public String getExecuteId() {
        return executeId;
    }

    /**
     * 设置工作流执行 ID。
     *
     * @param executeId 工作流执行 ID
     */
    public void setExecuteId(String executeId) {
        this.executeId = executeId;
    }

    /**
     * 获取带恢复定位符的临时文件。
     *
     * @return 临时文件记录
     */
    public List<WorkflowApiStoredFile> getStoredFiles() {
        return storedFiles;
    }

    /**
     * 设置带恢复定位符的临时文件。
     *
     * @param storedFiles 临时文件记录
     */
    public void setStoredFiles(
            List<WorkflowApiStoredFile> storedFiles) {
        this.storedFiles = storedFiles == null
                ? new ArrayList<>()
                : new ArrayList<>(storedFiles);
    }

    /**
     * 获取旧版临时文件路径。
     *
     * @return 临时文件路径
     */
    public List<String> getFilePaths() {
        return filePaths;
    }

    /**
     * 设置旧版临时文件路径。
     *
     * @param filePaths 临时文件路径
     */
    public void setFilePaths(List<String> filePaths) {
        this.filePaths = filePaths == null
                ? new ArrayList<>()
                : new ArrayList<>(filePaths);
    }

    /**
     * 获取创建时间。
     *
     * @return Unix 毫秒时间戳
     */
    public long getCreatedAt() {
        return createdAt;
    }

    /**
     * 设置创建时间。
     *
     * @param createdAt Unix 毫秒时间戳
     */
    public void setCreatedAt(long createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * 获取下次清理检查时间。
     *
     * @return Unix 毫秒时间戳
     */
    public long getCleanupAt() {
        return cleanupAt;
    }

    /**
     * 设置下次清理检查时间。
     *
     * @param cleanupAt Unix 毫秒时间戳
     */
    public void setCleanupAt(long cleanupAt) {
        this.cleanupAt = cleanupAt;
    }
}
