package tech.easyflow.ai.document.model;

/**
 * 统一文档源引用。
 *
 * <p>该模型用于屏蔽业务模块和底层解析框架的文件输入差异，业务方只需要描述文件来自哪里，
 * 具体由桥接层负责加载字节内容并转成统一解析请求。</p>
 *
 * @author Codex
 * @since 2026-04-14
 */
public class DocumentSourceRef {

    private String fileName;
    private String filePath;
    private String contentType;
    private Long size;
    private String url;
    private byte[] contentBytes;

    /**
     * 创建基于文件存储路径的文档源。
     *
     * @param filePath 存储路径
     * @return 文档源
     */
    public static DocumentSourceRef ofPath(String filePath) {
        DocumentSourceRef sourceRef = new DocumentSourceRef();
        sourceRef.setFilePath(filePath);
        return sourceRef;
    }

    /**
     * 创建基于内存字节的文档源。
     *
     * @param fileName 文件名
     * @param contentBytes 文件字节
     * @return 文档源
     */
    public static DocumentSourceRef ofBytes(String fileName, byte[] contentBytes) {
        DocumentSourceRef sourceRef = new DocumentSourceRef();
        sourceRef.setFileName(fileName);
        sourceRef.setContentBytes(contentBytes);
        return sourceRef;
    }

    /**
     * 创建基于 URL 的文档源。
     *
     * @param url 文件 URL
     * @return 文档源
     */
    public static DocumentSourceRef ofUrl(String url) {
        DocumentSourceRef sourceRef = new DocumentSourceRef();
        sourceRef.setUrl(url);
        return sourceRef;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    public Long getSize() {
        return size;
    }

    public void setSize(Long size) {
        this.size = size;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public byte[] getContentBytes() {
        return contentBytes;
    }

    public void setContentBytes(byte[] contentBytes) {
        this.contentBytes = contentBytes;
    }
}
