package com.microservices.zone.resource.utils;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.utils.StringUtils;

/**
 * 资源 extendData 工具类
 * 用于处理不同资源类型的扩展数据
 */
public class ResourceExtendDataUtils {

    private static final String SKILL_ROOT = "skill";
    private static final String SKILL_CONTENT = "content";
    private static final String SKILL_FILE_TREE = "fileTree";

    /**
     * 构建 Skill 资源的 extendData JSONObject
     *
     * @param skillContent SKILL.md 内容
     * @param fileTreeJson 目录树 JSONObject
     * @return extendData JSONObject
     */
    public static JSONObject buildSkillExtendData(String skillContent, JSONObject fileTreeJson) {
        JSONObject extendData = new JSONObject();
        JSONObject skill = new JSONObject();
        skill.put(SKILL_CONTENT, skillContent);
        if (fileTreeJson != null) {
            skill.put(SKILL_FILE_TREE, fileTreeJson);
        }
        extendData.put(SKILL_ROOT, skill);
        return extendData;
    }

    /**
     * 从 extendData 中提取 skillContent
     *
     * @param extendData extendData JSONObject
     * @return skillContent，不存在返回 null
     */
    public static String extractSkillContent(JSONObject extendData) {
        if (extendData == null || !extendData.containsKey(SKILL_ROOT)) {
            return null;
        }
        JSONObject skill = extendData.getJSONObject(SKILL_ROOT);
        return skill.getString(SKILL_CONTENT);
    }

    /**
     * 从 extendData 中提取 fileTree
     *
     * @param extendData extendData JSONObject
     * @return fileTree JSONObject，不存在返回 null
     */
    public static JSONObject extractSkillFileTree(JSONObject extendData) {
        if (extendData == null || !extendData.containsKey(SKILL_ROOT)) {
            return null;
        }
        JSONObject skill = extendData.getJSONObject(SKILL_ROOT);
        return skill.getJSONObject(SKILL_FILE_TREE);
    }

    /**
     * 更新 extendData 中的 skillContent
     *
     * @param extendData extendData JSONObject
     * @param skillContent 新的 skillContent
     * @return 更新后的 extendData
     */
    public static JSONObject updateSkillContent(JSONObject extendData, String skillContent) {
        if (extendData == null) {
            extendData = new JSONObject();
        }
        if (!extendData.containsKey(SKILL_ROOT)) {
            extendData.put(SKILL_ROOT, new JSONObject());
        }
        JSONObject skill = extendData.getJSONObject(SKILL_ROOT);
        skill.put(SKILL_CONTENT, skillContent);
        return extendData;
    }

    /**
     * 更新 extendData 中的 fileTree
     *
     * @param extendData extendData JSONObject
     * @param fileTreeJson 新的 fileTree
     * @return 更新后的 extendData
     */
    public static JSONObject updateSkillFileTree(JSONObject extendData, JSONObject fileTreeJson) {
        if (extendData == null) {
            extendData = new JSONObject();
        }
        if (!extendData.containsKey(SKILL_ROOT)) {
            extendData.put(SKILL_ROOT, new JSONObject());
        }
        JSONObject skill = extendData.getJSONObject(SKILL_ROOT);
        skill.put(SKILL_FILE_TREE, fileTreeJson);
        return extendData;
    }
}
