package com.lingyue.document.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.lingyue.common.domain.entity.SimpleModel;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;
import java.util.Map;

/**
 * 文档结构化元素实体
 * 存储从 Word/PDF 中提取的段落、图片、表格等
 * 
 * @author lingyue
 * @since 2026-01-21
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "document_elements", autoResultMap = true)
public class DocumentElement extends SimpleModel {
    
    /**
     * 文档 ID
     */
    private String documentId;
    
    /**
     * 元素在文档中的顺序索引
     */
    private Integer elementIndex;
    
    /**
     * 元素类型：paragraph/heading/heading1-9/list_item/image/table/title/toc
     */
    private String elementType;
    
    /**
     * 文本内容（文本类型元素）
     */
    private String content;
    
    /**
     * 样式信息（JSON）
     * {alignment, fontSize, fontFamily, bold, italic, underline, color, indentLeft, indentFirstLine, lineSpacing}
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Map<String, Object> style;
    
    // ========== 图片相关 ==========
    
    /**
     * 图片访问 URL
     */
    private String imageUrl;
    
    /**
     * 图片存储路径
     */
    private String imagePath;
    
    /**
     * 图片描述/替代文本
     */
    private String imageAlt;
    
    /**
     * 图片宽度（像素）
     */
    private Integer imageWidth;
    
    /**
     * 图片高度（像素）
     */
    private Integer imageHeight;
    
    /**
     * 图片格式：png/jpg/gif/etc
     */
    private String imageFormat;
    
    // ========== 表格相关 ==========
    
    /**
     * 表格索引
     */
    private Integer tableIndex;
    
    /**
     * 表格数据（JSON）
     * [[{row, col, text, colSpan, rowSpan, merged}, ...], ...]
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<List<Map<String, Object>>> tableData;
    
    /**
     * 表格行数
     */
    private Integer tableRowCount;
    
    /**
     * 表格列数
     */
    private Integer tableColCount;
    
    /**
     * 表格文本（用于搜索）
     */
    private String tableText;
}
