export interface PlugifyPluginMetadata {
    fileVersion: number
    version: string
    versionName: string
    friendlyName: string
    description: string
    createdBy: string
    createdByURL: string
    docsURL: string
    downloadURL: string
    updateURL: string
    entryPoint: string
    supportedPlatforms: string[]
    resourceDirectories: string[]
    languageModule: LanguageModule
    dependencies: Dependency[]
    methods: ExportedMethod[]
}

export interface LanguageModule {
    name: string
}

export interface Dependency {
    name: string
}

export interface ExportedMethod {
    name: string
    group: string
    description: string
    funcName: string
    paramTypes: ParamType[]
    retType: RetType
}

export interface ParamType {
    name: string
    type: string
    ref: boolean
    description: string
    enum?: Enum
    prototype?: Prototype
}

export interface Enum {
    name: string
    description: string
    values: EnumValue[]
}

export interface EnumValue {
    name: string
    value: number
    description: string
}

export interface Prototype {
    name: string
    description: string
    paramTypes: ParamType[]
    retType: RetType
}

export interface RetType {
    type: string
    description?: string
    enum?: Enum
}

export type PlugifyType = "void" | "bool" | "char8" | "char16" | "int8" | "int16" | "int32" | "int64" | "uint8" | "uint16" | "uint32" | "uint64" | "ptr64" | "float" | "double" | "function" | "string" | "any" | "vec2" | "vec3" | "vec4" | "mat4x4"
export type PlugifyArrayType = "bool[]" | "char8[]" | "char16[]" | "int8[]" | "int16[]" | "int32[]" | "int64[]" | "uint8[]" | "uint16[]" | "uint32[]" | "uint64[]" | "ptr64[]" | "float[]" | "double[]" | "string[]" | "any[]" | "vec2[]" | "vec3[]" | "vec4[]" | "mat4x4[]"

export interface PlugifyEnum {
    name: string;
    description: string;
    values: PlugifyEnumValue[]
}

export interface PlugifyEnumValue {
    value: any;
    name: string;
    description: string;
}