#pragma once

#include <switchboard/export.h>
#include <switchboard/SBAny.hpp>
#include <string>
#include <vector>
#include <map>

namespace switchboard {

const std::string SWITCHBOARD_NODE_NAMESPACE = "Switchboard";

const std::string NODE_CATEGORY_AUDIO_PROCESSING = "Audio Processing";
const std::string NODE_CATEGORY_MIXING = "Mixing";
const std::string NODE_CATEGORY_MUSIC = "Music";
const std::string NODE_CATEGORY_VOICE = "Voice";
const std::string NODE_CATEGORY_GENERATION = "Generation";
const std::string NODE_CATEGORY_ANALYSIS = "Analysis";
const std::string NODE_CATEGORY_EFFECTS = "Effects";
const std::string NODE_CATEGORY_UTILITY = "Utility";
const std::string NODE_CATEGORY_AI = "AI";
const std::string NODE_CATEGORY_RTC = "RTC";

struct SWITCHBOARDSDK_EXPORT NodeTypeInfo {
    std::string namespaceName;
    std::string type;
    std::string displayName;
    std::string description;
    std::vector<std::string> categories;
    SBAnyMap configuration;

    std::string getFQTypeName() const {
        return namespaceName + "." + type;
    }

    SBAnyMap toMap() const {
        return SBAnyMap({
            { "namespace", namespaceName },
            { "type", type },
            { "fqType", getFQTypeName() },
            { "displayName", displayName },
            { "description", description },
            { "categories", SBAnyVector(categories) },
            { "configuration", configuration }
        });
    }
};

}
