package com.easyagents.skill.model;

import java.io.Serial;
import java.io.Serializable;

/**
 * Skill 根目录下的通用安全资源。
 */
public class SkillResource implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    private String path;
    private SkillResourceKind kind = SkillResourceKind.OTHER;
    private String mediaType;
    private String textContent;
    private String contentRef;
    private String contentHash;
    private long size;

    /**
     * 获取 Skill 根目录相对路径。
     *
     * @return 资源路径
     */
    public String getPath() {
        return path;
    }

    /**
     * 设置 Skill 根目录相对路径。
     *
     * @param path 资源路径
     */
    public void setPath(String path) {
        this.path = path;
    }

    /**
     * 获取资源语义类型。
     *
     * @return 资源语义类型
     */
    public SkillResourceKind getKind() {
        return kind;
    }

    /**
     * 设置资源语义类型。
     *
     * @param kind 资源语义类型
     */
    public void setKind(SkillResourceKind kind) {
        this.kind = kind == null ? SkillResourceKind.OTHER : kind;
    }

    /**
     * 获取媒体类型。
     *
     * @return 媒体类型
     */
    public String getMediaType() {
        return mediaType;
    }

    /**
     * 设置媒体类型。
     *
     * @param mediaType 媒体类型
     */
    public void setMediaType(String mediaType) {
        this.mediaType = mediaType;
    }

    /**
     * 获取严格 UTF-8 文本内容。
     *
     * @return 文本内容，二进制资源返回 null
     */
    public String getTextContent() {
        return textContent;
    }

    /**
     * 设置严格 UTF-8 文本内容。
     *
     * @param textContent 文本内容
     */
    public void setTextContent(String textContent) {
        this.textContent = textContent;
    }

    /**
     * 获取二进制内容引用。
     *
     * @return 内容引用，文本资源通常返回 null
     */
    public String getContentRef() {
        return contentRef;
    }

    /**
     * 设置二进制内容引用。
     *
     * @param contentRef 内容引用
     */
    public void setContentRef(String contentRef) {
        this.contentRef = contentRef;
    }

    /**
     * 获取内容 SHA-256。
     *
     * @return 十六进制 SHA-256
     */
    public String getContentHash() {
        return contentHash;
    }

    /**
     * 设置内容 SHA-256。
     *
     * @param contentHash 十六进制 SHA-256
     */
    public void setContentHash(String contentHash) {
        this.contentHash = contentHash;
    }

    /**
     * 获取原始字节大小。
     *
     * @return 字节大小
     */
    public long getSize() {
        return size;
    }

    /**
     * 设置原始字节大小。
     *
     * @param size 字节大小
     */
    public void setSize(long size) {
        this.size = size;
    }

    /**
     * 判断资源是否以内联文本保存。
     *
     * @return 包含文本内容时为 true
     */
    public boolean isText() {
        return textContent != null;
    }
}
