package com.microservices.file.domain.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * 上传进度返回VO
 *
 * @author microservices
 */
@Data
@ApiModel("上传进度返回")
public class UploadProgressVo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 上传ID
     */
    @ApiModelProperty(value = "上传ID")
    private String uploadId;

    /**
     * 文件名
     */
    @ApiModelProperty(value = "文件名")
    private String fileName;

    /**
     * 文件总大小（字节）
     */
    @ApiModelProperty(value = "文件总大小（字节）")
    private Long fileSize;

    /**
     * 总分片数
     */
    @ApiModelProperty(value = "总分片数")
    private Integer totalChunks;

    /**
     * 已上传分片数
     */
    @ApiModelProperty(value = "已上传分片数")
    private Integer uploadedChunks;

    /**
     * 上传进度（百分比）
     */
    @ApiModelProperty(value = "上传进度（百分比）")
    private Integer progress;

    /**
     * 上传状态
     */
    @ApiModelProperty(value = "上传状态")
    private String status;

    /**
     * 上传速度（字节/秒）
     */
    @ApiModelProperty(value = "上传速度（字节/秒）")
    private Long uploadSpeed;

    /**
     * 预计剩余时间（秒）
     */
    @ApiModelProperty(value = "预计剩余时间（秒）")
    private Long remainingSeconds;

    /**
     * 合并进度（0-100，仅在MERGING状态时有效）
     */
    @ApiModelProperty(value = "合并进度")
    private Integer mergeProgress;

    /**
     * 文件ID（合并完成后返回）
     */
    @ApiModelProperty(value = "文件ID")
    private Long fileId;

    /**
     * 文件下载地址（合并完成后返回）
     */
    @ApiModelProperty(value = "文件下载地址")
    private String downloadUrl;

    /**
     * 文件路径（合并完成后返回）
     */
    @ApiModelProperty(value = "文件路径")
    private String filePath;

    /**
     * 错误信息（合并失败时返回）
     */
    @ApiModelProperty(value = "错误信息")
    private String errorMessage;
}
