package com.agent.management.model.entity;

import jakarta.persistence.*;
import lombok.Data;

/**
 * 文档分块（chunk），每块对应 Milvus 中一条向量记录
 */
@Data
@Entity
@Table(name = "kb_chunk", indexes = {
        @Index(name = "idx_kb_chunk_doc", columnList = "document_id"),
        @Index(name = "idx_kb_chunk_vec", columnList = "vector_id")
})
public class KbChunk {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "document_id", nullable = false)
    private Long documentId;

    /**
     * 在文档中的顺序（从 0 开始）
     */
    @Column(name = "chunk_index", nullable = false)
    private Integer chunkIndex;

    /**
     * 分块文本内容
     */
    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    /**
     * 对应 Milvus 中的向量 ID（与 Milvus 主键一致）
     */
    @Column(name = "vector_id")
    private String vectorId;

    /**
     * 字符数
     */
    @Column(name = "char_count")
    private Integer charCount;

    /**
     * 分块层级（1=粗粒度父块，2=中粒度父块，3=叶子检索块）
     */
    @Column(name = "chunk_level")
    private Integer chunkLevel;

    /**
     * 分块唯一标识（Milvus 中用于关联父子块）
     */
    @Column(name = "chunk_id", length = 512)
    private String chunkId;

    /**
     * 父分块标识（L1 为空）
     */
    @Column(name = "parent_chunk_id", length = 512)
    private String parentChunkId;

    /**
     * 根分块标识（最顶层 L1）
     */
    @Column(name = "root_chunk_id", length = 512)
    private String rootChunkId;
}
