package com.qqchen.deploy.backend.framework.ssh.file;

import com.qqchen.deploy.backend.framework.ssh.file.AsyncFileUploadService.TaskStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.Map;

/**
 * 文件上传任务（Framework层）
 * 
 * 通用的文件上传任务模型，可用于各种文件上传场景
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FileUploadTask {
    
    /**
     * 任务ID
     */
    private String taskId;
    
    /**
     * 文件名
     */
    private String fileName;
    
    /**
     * 文件大小（字节）
     */
    private Long fileSize;
    
    /**
     * 格式化的文件大小
     */
    private String fileSizeFormatted;
    
    /**
     * 已上传大小（字节）
     */
    private Long uploadedSize;
    
    /**
     * 格式化的已上传大小
     */
    private String uploadedSizeFormatted;
    
    /**
     * 进度百分比（0-100）
     */
    private Integer progress;
    
    /**
     * 状态
     */
    private TaskStatus status;
    
    /**
     * 错误信息
     */
    private String errorMessage;
    
    /**
     * 元数据（扩展字段，如服务器ID、目标路径等）
     */
    private Map<String, Object> metadata;
    
    /**
     * 创建时间
     */
    private Date createTime;
    
    /**
     * 更新时间
     */
    private Date updateTime;
    
    /**
     * 取消标记（volatile 保证多线程可见性）
     * 用于支持取消正在上传的任务
     */
    private volatile boolean cancelled = false;
    
    /**
     * 标记任务为取消状态
     */
    public void cancel() {
        this.cancelled = true;
    }
    
    /**
     * 检查任务是否已被取消
     */
    public boolean isCancelled() {
        return cancelled;
    }
}
