package com.easyagents.document.core.entity;

/**
 * 异步任务聚合查询结果。
 *
 * <p>该对象在任务状态字段基础上，按需附带最终解析结果。
 * 当任务尚未完成时只返回状态信息；当任务已完成时可同时返回结果内容。</p>
 *
 * @author Codex
 * @since 2026-04-14
 */
public class ParseTaskInfo extends ParseTaskStatus {

    private ParseResponse result;

    /**
     * 基于任务状态创建聚合查询结果。
     *
     * @param status 任务状态
     * @return 聚合查询结果
     */
    public static ParseTaskInfo fromStatus(ParseTaskStatus status) {
        ParseTaskInfo taskInfo = new ParseTaskInfo();
        if (status == null) {
            return taskInfo;
        }
        taskInfo.setTaskId(status.getTaskId());
        taskInfo.setStatus(status.getStatus());
        taskInfo.setBackend(status.getBackend());
        taskInfo.setFileNames(status.getFileNames());
        taskInfo.setCreatedAt(status.getCreatedAt());
        taskInfo.setStartedAt(status.getStartedAt());
        taskInfo.setCompletedAt(status.getCompletedAt());
        taskInfo.setError(status.getError());
        taskInfo.setStatusUrl(status.getStatusUrl());
        taskInfo.setResultUrl(status.getResultUrl());
        taskInfo.setQueuedAhead(status.getQueuedAhead());
        taskInfo.setProgressPercent(status.getProgressPercent());
        taskInfo.setCurrentStage(status.getCurrentStage());
        taskInfo.setProcessedItems(status.getProcessedItems());
        taskInfo.setTotalItems(status.getTotalItems());
        taskInfo.setStatusMessage(status.getStatusMessage());
        return taskInfo;
    }

    /**
     * 获取最终解析结果。
     *
     * @return 解析结果；任务未完成时可能为空
     */
    public ParseResponse getResult() {
        return result;
    }

    /**
     * 设置最终解析结果。
     *
     * @param result 解析结果
     */
    public void setResult(ParseResponse result) {
        this.result = result;
    }
}
