package cn.gov.customs.wxjy.ibmmq.model;

import cn.gov.customs.wxjy.ibmmq.enums.MessageType;
import lombok.Data;

import java.io.Serializable;

/**
 * 传输消息，封装不同类型的消息（分片、完成）
 */
@Data
public class FileMessage implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 消息类型
     */
    private MessageType type;
    /**
     * 文件唯一标识（如 UUID），避免同名文件冲突，关联所有分片
     */
    private String fileId;
    /**
     *  原始文件名（含扩展名）
     */
    private String fileName;
    /**
     * 文件总大小（字节），用于校验重组后文件完整性
     */
    private long fileSize;
    /**
     * 文件完整哈希值（如 SHA-256），用于最终校验文件一致性
     */
    private String fileHash;
    /**
     * 单分片大小（如 4MB，需小于 MQ 最大消息长度）
     */
    private int shardSize;
    /**
     * 分片序号（从0开始）
     */
    private int shardIndex;
    /**
     * 总分片数（根据分片大小计算）
     */
    private int totalShards;
    /**
     *  分片二进制数据（Base64编码，避免二进制传输问题）
     */
    private String shardData;
    /**
     * 分片自身哈希（可选，用于校验单分片完整性）
     */
    private String shardHash;
    /**
     * 接收到的文件保存路径
     */
    private String savePath;
    /**
     * 消息备注
     */
    private Object remark;

    @Override
    public String toString() {
        return "FileMessage{" +
                "fileId='" + fileId + '\'' +
                ", fileName='" + fileName + '\'' +
                ", fileSize=" + fileSize +
                ", fileHash='" + fileHash + '\'' +
                ", shardSize=" + shardSize +
                ", shardIndex=" + shardIndex +
                ", totalShards=" + totalShards +
                ", shardData.length()=" + (shardData != null ? shardData.length() : 0) +
                ", shardHash='" + shardHash + '\'' +
                ", savePath='" + savePath + '\'' +
                '}';
    }
}
