package tech.easyflow.ai.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;

/**
 * 文档导入中间快照清理记录。
 *
 * <p>记录精确清单路径、清理阶段和租约，使对象存储删除失败后可以跨进程重试。</p>
 *
 * @author Codex
 * @since 2026-08-04
 */
@Table(
    value = "tb_document_import_snapshot_cleanup",
    comment = "文档导入中间快照清理记录")
public class DocumentImportSnapshotCleanup
    extends DateEntity
    implements Serializable {

    @Id(keyType = KeyType.Generator, value = "snowFlakeId")
    private BigInteger id;

    @Column(comment = "知识库ID")
    private BigInteger knowledgeId;

    @Column(comment = "文档ID")
    private BigInteger documentId;

    @Column(comment = "快照类型")
    private String snapshotType;

    @Column(comment = "快照清单路径")
    private String manifestPath;

    @Column(comment = "快照清单路径SHA-256")
    private String pathHash;

    @Column(comment = "清理阶段")
    private String phase;

    @Column(comment = "已尝试次数")
    private Integer attemptCount;

    @Column(comment = "下次重试时间")
    private Date nextRetryAt;

    @Column(comment = "执行令牌")
    private String executionToken;

    @Column(comment = "租约截止时间")
    private Date leaseUntil;

    @Column(comment = "最近错误")
    private String lastError;

    @Column(comment = "创建时间")
    private Date created;

    @Column(comment = "修改时间")
    private Date modified;

    /**
     * 返回主键。
     *
     * @return 主键
     */
    public BigInteger getId() {
        return id;
    }

    /**
     * 设置主键。
     *
     * @param id 主键
     */
    public void setId(BigInteger id) {
        this.id = id;
    }

    /**
     * 返回知识库 ID。
     *
     * @return 知识库 ID
     */
    public BigInteger getKnowledgeId() {
        return knowledgeId;
    }

    /**
     * 设置知识库 ID。
     *
     * @param knowledgeId 知识库 ID
     */
    public void setKnowledgeId(BigInteger knowledgeId) {
        this.knowledgeId = knowledgeId;
    }

    /**
     * 返回文档 ID。
     *
     * @return 文档 ID
     */
    public BigInteger getDocumentId() {
        return documentId;
    }

    /**
     * 设置文档 ID。
     *
     * @param documentId 文档 ID
     */
    public void setDocumentId(BigInteger documentId) {
        this.documentId = documentId;
    }

    /**
     * 返回快照类型。
     *
     * @return 快照类型
     */
    public String getSnapshotType() {
        return snapshotType;
    }

    /**
     * 设置快照类型。
     *
     * @param snapshotType 快照类型
     */
    public void setSnapshotType(String snapshotType) {
        this.snapshotType = snapshotType;
    }

    /**
     * 返回清单路径。
     *
     * @return 清单路径
     */
    public String getManifestPath() {
        return manifestPath;
    }

    /**
     * 设置清单路径。
     *
     * @param manifestPath 清单路径
     */
    public void setManifestPath(String manifestPath) {
        this.manifestPath = manifestPath;
    }

    /**
     * 返回路径摘要。
     *
     * @return 路径摘要
     */
    public String getPathHash() {
        return pathHash;
    }

    /**
     * 设置路径摘要。
     *
     * @param pathHash 路径摘要
     */
    public void setPathHash(String pathHash) {
        this.pathHash = pathHash;
    }

    /**
     * 返回清理阶段。
     *
     * @return 清理阶段
     */
    public String getPhase() {
        return phase;
    }

    /**
     * 设置清理阶段。
     *
     * @param phase 清理阶段
     */
    public void setPhase(String phase) {
        this.phase = phase;
    }

    /**
     * 返回已尝试次数。
     *
     * @return 已尝试次数
     */
    public Integer getAttemptCount() {
        return attemptCount;
    }

    /**
     * 设置已尝试次数。
     *
     * @param attemptCount 已尝试次数
     */
    public void setAttemptCount(Integer attemptCount) {
        this.attemptCount = attemptCount;
    }

    /**
     * 返回下次重试时间。
     *
     * @return 下次重试时间
     */
    public Date getNextRetryAt() {
        return nextRetryAt;
    }

    /**
     * 设置下次重试时间。
     *
     * @param nextRetryAt 下次重试时间
     */
    public void setNextRetryAt(Date nextRetryAt) {
        this.nextRetryAt = nextRetryAt;
    }

    /**
     * 返回执行令牌。
     *
     * @return 执行令牌
     */
    public String getExecutionToken() {
        return executionToken;
    }

    /**
     * 设置执行令牌。
     *
     * @param executionToken 执行令牌
     */
    public void setExecutionToken(String executionToken) {
        this.executionToken = executionToken;
    }

    /**
     * 返回租约截止时间。
     *
     * @return 租约截止时间
     */
    public Date getLeaseUntil() {
        return leaseUntil;
    }

    /**
     * 设置租约截止时间。
     *
     * @param leaseUntil 租约截止时间
     */
    public void setLeaseUntil(Date leaseUntil) {
        this.leaseUntil = leaseUntil;
    }

    /**
     * 返回最近错误。
     *
     * @return 最近错误
     */
    public String getLastError() {
        return lastError;
    }

    /**
     * 设置最近错误。
     *
     * @param lastError 最近错误
     */
    public void setLastError(String lastError) {
        this.lastError = lastError;
    }

    /**
     * 返回创建时间。
     *
     * @return 创建时间
     */
    @Override
    public Date getCreated() {
        return created;
    }

    /**
     * 设置创建时间。
     *
     * @param created 创建时间
     */
    @Override
    public void setCreated(Date created) {
        this.created = created;
    }

    /**
     * 返回修改时间。
     *
     * @return 修改时间
     */
    @Override
    public Date getModified() {
        return modified;
    }

    /**
     * 设置修改时间。
     *
     * @param modified 修改时间
     */
    @Override
    public void setModified(Date modified) {
        this.modified = modified;
    }
}
