package tech.easyflow.agent.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import tech.easyflow.common.entity.DateEntity;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;

/**
 * Agent 文档附件状态账本实体。
 */
@Table("tb_agent_document_attachment")
public class AgentDocumentAttachment extends DateEntity implements Serializable {

    /** 主键。 */
    @Id(keyType = KeyType.Generator, value = "snowFlakeId")
    private BigInteger id;
    /** 稳定附件 ID。 */
    private String attachmentId;
    /** 临时上传 ID。 */
    private String uploadId;
    /** 租户 ID。 */
    @Column(tenantId = true)
    private BigInteger tenantId;
    /** 上传用户 ID。 */
    private BigInteger userId;
    /** Agent ID。 */
    private BigInteger agentId;
    /** 聊天模式。 */
    private String mode;
    /** 会话 ID。 */
    private String sessionId;
    /** 绑定消息 ID。 */
    private String messageId;
    /** 原始文件名。 */
    private String originalName;
    /** 文件扩展名。 */
    private String extension;
    /** MIME 类型。 */
    private String mimeType;
    /** 文件字节数。 */
    private Long fileSize;
    /** 文件 SHA-256。 */
    private String fileSha256;
    /** 私有原文件对象键。 */
    private String objectKey;
    /** 附件状态。 */
    private String status;
    /** 当前读取快照 ID。 */
    private String currentSnapshotId;
    /** 错误码。 */
    private String errorCode;
    /** 错误消息。 */
    private String errorMessage;
    /** 临时附件过期时间。 */
    private Date expiresAt;
    /** 乐观版本号。 */
    private Long version;
    /** 创建时间。 */
    private Date created;
    /** 创建人。 */
    private BigInteger createdBy;
    /** 修改时间。 */
    private Date modified;
    /** 修改人。 */
    private BigInteger modifiedBy;

    /** @return 主键 */
    public BigInteger getId() { return id; }
    /** @param id 主键 */
    public void setId(BigInteger id) { this.id = id; }
    /** @return 稳定附件 ID */
    public String getAttachmentId() { return attachmentId; }
    /** @param attachmentId 稳定附件 ID */
    public void setAttachmentId(String attachmentId) { this.attachmentId = attachmentId; }
    /** @return 上传 ID */
    public String getUploadId() { return uploadId; }
    /** @param uploadId 上传 ID */
    public void setUploadId(String uploadId) { this.uploadId = uploadId; }
    /** @return 租户 ID */
    public BigInteger getTenantId() { return tenantId; }
    /** @param tenantId 租户 ID */
    public void setTenantId(BigInteger tenantId) { this.tenantId = tenantId; }
    /** @return 用户 ID */
    public BigInteger getUserId() { return userId; }
    /** @param userId 用户 ID */
    public void setUserId(BigInteger userId) { this.userId = userId; }
    /** @return Agent ID */
    public BigInteger getAgentId() { return agentId; }
    /** @param agentId Agent ID */
    public void setAgentId(BigInteger agentId) { this.agentId = agentId; }
    /** @return 聊天模式 */
    public String getMode() { return mode; }
    /** @param mode 聊天模式 */
    public void setMode(String mode) { this.mode = mode; }
    /** @return 会话 ID */
    public String getSessionId() { return sessionId; }
    /** @param sessionId 会话 ID */
    public void setSessionId(String sessionId) { this.sessionId = sessionId; }
    /** @return 消息 ID */
    public String getMessageId() { return messageId; }
    /** @param messageId 消息 ID */
    public void setMessageId(String messageId) { this.messageId = messageId; }
    /** @return 原始文件名 */
    public String getOriginalName() { return originalName; }
    /** @param originalName 原始文件名 */
    public void setOriginalName(String originalName) { this.originalName = originalName; }
    /** @return 扩展名 */
    public String getExtension() { return extension; }
    /** @param extension 扩展名 */
    public void setExtension(String extension) { this.extension = extension; }
    /** @return MIME 类型 */
    public String getMimeType() { return mimeType; }
    /** @param mimeType MIME 类型 */
    public void setMimeType(String mimeType) { this.mimeType = mimeType; }
    /** @return 文件字节数 */
    public Long getFileSize() { return fileSize; }
    /** @param fileSize 文件字节数 */
    public void setFileSize(Long fileSize) { this.fileSize = fileSize; }
    /** @return 文件 SHA-256 */
    public String getFileSha256() { return fileSha256; }
    /** @param fileSha256 文件 SHA-256 */
    public void setFileSha256(String fileSha256) { this.fileSha256 = fileSha256; }
    /** @return 原文件对象键 */
    public String getObjectKey() { return objectKey; }
    /** @param objectKey 原文件对象键 */
    public void setObjectKey(String objectKey) { this.objectKey = objectKey; }
    /** @return 附件状态 */
    public String getStatus() { return status; }
    /** @param status 附件状态 */
    public void setStatus(String status) { this.status = status; }
    /** @return 当前快照 ID */
    public String getCurrentSnapshotId() { return currentSnapshotId; }
    /** @param currentSnapshotId 当前快照 ID */
    public void setCurrentSnapshotId(String currentSnapshotId) { this.currentSnapshotId = currentSnapshotId; }
    /** @return 错误码 */
    public String getErrorCode() { return errorCode; }
    /** @param errorCode 错误码 */
    public void setErrorCode(String errorCode) { this.errorCode = errorCode; }
    /** @return 错误消息 */
    public String getErrorMessage() { return errorMessage; }
    /** @param errorMessage 错误消息 */
    public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; }
    /** @return 过期时间 */
    public Date getExpiresAt() { return expiresAt; }
    /** @param expiresAt 过期时间 */
    public void setExpiresAt(Date expiresAt) { this.expiresAt = expiresAt; }
    /** @return 版本号 */
    public Long getVersion() { return version; }
    /** @param version 版本号 */
    public void setVersion(Long version) { this.version = version; }
    /** @return 创建时间 */
    @Override public Date getCreated() { return created; }
    /** @param created 创建时间 */
    @Override public void setCreated(Date created) { this.created = created; }
    /** @return 创建人 */
    public BigInteger getCreatedBy() { return createdBy; }
    /** @param createdBy 创建人 */
    public void setCreatedBy(BigInteger createdBy) { this.createdBy = createdBy; }
    /** @return 修改时间 */
    @Override public Date getModified() { return modified; }
    /** @param modified 修改时间 */
    @Override public void setModified(Date modified) { this.modified = modified; }
    /** @return 修改人 */
    public BigInteger getModifiedBy() { return modifiedBy; }
    /** @param modifiedBy 修改人 */
    public void setModifiedBy(BigInteger modifiedBy) { this.modifiedBy = modifiedBy; }
}
