package com.microservices.zone.resource.utils;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.utils.StringUtils;
import com.microservices.zone.resource.domain.vo.AiUploadedResourceParseResultVo;

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

    public static final String SKILL_ROOT = "SKILL";
    private static final String SKILL_CONTENT = "content";

    private static final String MODEL_ROOT = "MODEL";
    private static final String DATASET_ROOT = "DATASET";
    private static final String CONTENT = "content";
    public static final String FILE_TREE = "fileTree";
    public static final String FILE_SIZE = "fileSize";

    /**
     * 构建 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(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(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(FILE_TREE, fileTreeJson);
        return extendData;
    }

    // ==================== Model 资源 extendData 方法 ====================

    /**
     * 构建 Model/数据集 资源的 extendData JSONObject
     *
     * @return extendData JSONObject
     */
    public static JSONObject buildModelOrDataSetExtendData(String resourceCategory, AiUploadedResourceParseResultVo parseResult) {
        JSONObject extendData = new JSONObject();
        JSONObject data = new JSONObject();
        if (parseResult.getReadmeContent() != null) {
            data.put(CONTENT, parseResult.getReadmeContent());
        }

        if (parseResult.getFileTreeJson() != null) {
            data.put(FILE_TREE, parseResult.getFileTreeJson());
        }
        if (parseResult.getFileSizeInfo() != null) {
            data.put(FILE_SIZE, parseResult.getFileSizeInfo());
        }
        extendData.put(resourceCategory, data);
        return extendData;
    }

    /**
     * 从 extendData 中提取 model 的 readmeContent
     */
    public static String extractModelReadmeContent(JSONObject extendData) {
        if (extendData == null || !extendData.containsKey(MODEL_ROOT)) {
            return null;
        }
        JSONObject model = extendData.getJSONObject(MODEL_ROOT);
        return model.getString(CONTENT);
    }

    /**
     * 从 extendData 中提取 model 的 fileTree
     */
    public static JSONObject extractModelFileTree(JSONObject extendData) {
        if (extendData == null || !extendData.containsKey(MODEL_ROOT)) {
            return null;
        }
        JSONObject model = extendData.getJSONObject(MODEL_ROOT);
        return model.getJSONObject(FILE_TREE);
    }

    /**
     * 更新 extendData 中的 readmeContent
     */
    public static JSONObject updateModelOrDatasetReadmeContent(String resourceCategory, JSONObject extendData, String readmeContent) {
        if (extendData == null) {
            extendData = new JSONObject();
        }
        if (!extendData.containsKey(resourceCategory)) {
            extendData.put(resourceCategory, new JSONObject());
        }
        JSONObject data = extendData.getJSONObject(resourceCategory);
        data.put(CONTENT, readmeContent);
        return extendData;
    }

    /**
     * 更新 extendData 中的 model fileTree
     */
    public static JSONObject updateModelOrDatasetFileTree(String resourceCategory, JSONObject extendData, JSONObject fileTreeJson) {
        if (extendData == null) {
            extendData = new JSONObject();
        }
        if (!extendData.containsKey(resourceCategory)) {
            extendData.put(resourceCategory, new JSONObject());
        }
        JSONObject model = extendData.getJSONObject(resourceCategory);
        model.put(FILE_TREE, fileTreeJson);
        return extendData;
    }


    /**
     * 从 extendData 中提取 dataset 的 readmeContent
     */
    public static String extractDatasetReadmeContent(JSONObject extendData) {
        if (extendData == null || !extendData.containsKey(DATASET_ROOT)) {
            return null;
        }
        JSONObject dataset = extendData.getJSONObject(DATASET_ROOT);
        return dataset.getString(CONTENT);
    }

    /**
     * 从 extendData 中提取 dataset 的 fileTree
     */
    public static JSONObject extractDatasetFileTree(JSONObject extendData) {
        if (extendData == null || !extendData.containsKey(DATASET_ROOT)) {
            return null;
        }
        JSONObject dataset = extendData.getJSONObject(DATASET_ROOT);
        return dataset.getJSONObject(FILE_TREE);
    }

    /**
     * 更新 extendData 中的 dataset readmeContent
     */
    public static JSONObject updateDatasetReadmeContent(JSONObject extendData, String readmeContent) {
        if (extendData == null) {
            extendData = new JSONObject();
        }
        if (!extendData.containsKey(DATASET_ROOT)) {
            extendData.put(DATASET_ROOT, new JSONObject());
        }
        JSONObject dataset = extendData.getJSONObject(DATASET_ROOT);
        dataset.put(CONTENT, readmeContent);
        return extendData;
    }

    /**
     * 更新 extendData 中的 dataset fileTree
     */
    public static JSONObject updateDatasetFileTree(JSONObject extendData, JSONObject fileTreeJson) {
        if (extendData == null) {
            extendData = new JSONObject();
        }
        if (!extendData.containsKey(DATASET_ROOT)) {
            extendData.put(DATASET_ROOT, new JSONObject());
        }
        JSONObject dataset = extendData.getJSONObject(DATASET_ROOT);
        dataset.put(FILE_TREE, fileTreeJson);
        return extendData;
    }
}
