﻿
/**
 * Represents a misconfiguration type with specific details.
 */
 interface MisConfigType {
    /**
     * The unique identifier of the misconfiguration type.
     */
    Id: number;

    /**
     * The plugin system name associated with the misconfiguration.
     */
    PluginSystemName: string;

    /**
     * The external identifier or reference for the misconfiguration.
     */
    ExternalId: string;
}

/**
 * Represents a misconfiguration interface.
 */

declare const MisConfigType: MisConfigType;

/**
 * Represents the MIS plugins object.
 */
interface MisPluginsObject {
   /**
    * Gets the list of available plugins.
    * @returns An array instance containing the names of available plugins.
    */
   GetPluginList(): Array<string>;

   /**
    * Gets the actions available for a specified plugin.
    * @param systemName - The system name of the plugin.
    * @returns An object instance containing the script actions for the specified plugin.
    */
   GetPluginActions(systemName: string): Object;

   /**
    * Executes a specified action for a plugin.
    * @param systemName - The system name of the plugin.
    * @param action - The action to execute.
    * @param inputFiles - The input files for the action.
    * @param parameters - The parameters for the action.
    * @returns A response object containing the result of the action execution.
    */
   ExecuteAction(
       systemName: string,
       action: string,
       inputFiles: Object,
       parameters: Object
   ): MisExecuteActionResponseObject | null;
}

/**
 * Represents the response object for executing an action in a MIS plugin.
 */
interface MisExecuteActionResponseObject {
   /**
    * Indicates whether the action execution was successful.
    */
   Success: boolean;

   /**
    * The result of the action execution.
    * Converts the result to an ObjectInstance.
    */
   Result: Object;

   /**
    * The output files generated by the action execution.
    * Converts the files to ObjectInstance if available, otherwise returns null.
    */
   OutputFiles: Object | null;
}