/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 * 
 * Code generated by Microsoft (R) AutoRest Code Generator 0.16.0.0
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
// TODO: Include PageTemplateModels here too?? Probably
 */


/**
 * @class
 * Initializes a new instance of the Resource class.
 * @constructor
 * ARM Resource Information
 * @member {string} [id] ARM Resource ID
 * 
 * @member {string} [type] ARM Resource Type
 * 
 * @member {string} [name] ARM Resource Name
 * 
 * @member {string} [location] ARM Resource Location
 * 
 * @member {object} [tags] ARM Resource Tags
 * 
 * @member {string} [etag]
 * 
 */
export interface Resource extends BaseResource {
    id?: string;
    type?: string;
    name?: string;
    location?: string;
    tags?: { [propertyName: string]: string };
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the GatewayResource class.
 * @constructor
 * @member {date} [created] UTC date and time when gateway was first added to
 * management service
 * 
 * @member {date} [updated] UTC date and time when node was last updated
 * 
 * @member {string} [autoUpgrade] setting of the autoupgrade. Possible values
 * include: 'On', 'Off'
 * 
 * @member {string} [desiredVersion] latest available msi version
 * 
 * @member {array} [instances] names of the nodes in the gateway
 * 
 * @member {number} [activeMessageCount] number of active messages
 * 
 * @member {string} [latestPublishedMsiVersion] last published msi version
 * 
 * @member {date} [publishedTimeUtc] the date/time of the last published
 * gateway
 * 
 */
export interface GatewayResource extends Resource {
    created?: Date;
    updated?: Date;
    autoUpgrade?: string;
    desiredVersion?: string;
    instances?: GatewayStatus[];
    activeMessageCount?: number;
    latestPublishedMsiVersion?: string;
    publishedTimeUtc?: Date;
}

/**
 * @class
 * Initializes a new instance of the GatewayStatus class.
 * @constructor
 * Expanded gateway status information
 * @member {number} [availableMemoryMByte] The available memory on the gateway
 * host machine in megabytes.
 * 
 * @member {number} [gatewayCpuUtilizationPercent] The CPU utilization of the
 * gateway process (numeric value between 0 and 100).
 * 
 * @member {number} [totalCpuUtilizationPercent] CPU Utilization of the whole
 * system.
 * 
 * @member {string} [gatewayVersion] The version of the gateway that is
 * installed on the system.
 * 
 * @member {string} [friendlyOsName] The Plaintext description of the OS on
 * the gateway.
 * 
 * @member {date} [installedDate] The date the gateway was installed
 * 
 * @member {number} [logicalProcessorCount] Number of logical processors in
 * the gateway system.
 * 
 * @member {string} [name] The computer name of the gateway system.
 * 
 * @member {string} [gatewayId] The gateway resource id.
 * 
 * @member {number} [gatewayWorkingSetMByte] The working set size of the
 * gateway process in megabytes.
 * 
 * @member {date} [statusUpdated] UTC date and time when gateway status was
 * last updated
 * 
 */
export interface GatewayStatus {
    availableMemoryMByte?: number;
    gatewayCpuUtilizationPercent?: number;
    totalCpuUtilizationPercent?: number;
    gatewayVersion?: string;
    friendlyOsName?: string;
    installedDate?: Date;
    logicalProcessorCount?: number;
    name?: string;
    gatewayId?: string;
    gatewayWorkingSetMByte?: number;
    statusUpdated?: Date;
}

/**
 * @class
 * Initializes a new instance of the GatewayProfile class.
 * @constructor
 * JSON properties that the gateway service uses know how to communicate with
 * the resource.
 * @member {string} [dataPlaneServiceBaseAddress] the Dataplane connection URL
 * 
 * @member {string} [gatewayId] the ID of the gateway
 * 
 * @member {string} [environment] the environment for the gateway (DEV,
 * DogFood, or Production)
 * 
 * @member {string} [upgradeManifestUrl] Gateway upgrade manifest URL
 * 
 * @member {string} [messagingNamespace] Messaging namespace
 * 
 * @member {string} [messagingAccount] Messaging Account
 * 
 * @member {string} [messagingKey] Messaging Key
 * 
 * @member {string} [requestQueue] Request queue name
 * 
 * @member {string} [responseTopic] Response topic name
 * 
 * @member {string} [statusBlobSignature] The gateway status blob SAS url
 * 
 */
export interface GatewayProfile {
    dataPlaneServiceBaseAddress?: string;
    gatewayId?: string;
    environment?: string;
    upgradeManifestUrl?: string;
    messagingNamespace?: string;
    messagingAccount?: string;
    messagingKey?: string;
    requestQueue?: string;
    responseTopic?: string;
    statusBlobSignature?: string;
}

/**
 * @class
 * Initializes a new instance of the GatewayParameters class.
 * @constructor
 * @member {string} [location] location of the resource
 * 
 * @member {object} [tags] resource tags
 * 
 * @member {string} [autoUpgrade] The autoUpgrade property gives the
 * flexibility to gateway to auto upgrade itself. If properties value not
 * specified, then we assume autoUpgrade = Off. Possible values include:
 * 'On', 'Off'
 * 
 */
export interface GatewayParameters {
    location?: string;
    tags?: any;
    autoUpgrade?: string;
}

/**
 * @class
 * Initializes a new instance of the NodeResource class.
 * @constructor
 * A Node Resource
 * @member {string} [gatewayId] Id of the gateway
 * 
 * @member {string} [connectionName] myhost.domain.com
 * 
 * @member {date} [created] UTC date and time when node was first added to
 * management service
 * 
 * @member {date} [updated] UTC date and time when node was last updated.
 * 
 */
export interface NodeResource extends Resource {
    gatewayId?: string;
    connectionName?: string;
    created?: Date;
    updated?: Date;
}

/**
 * @class
 * Initializes a new instance of the NodeParameters class.
 * @constructor
 * @member {string} [location] location of the resource?
 * 
 * @member {object} [tags] resource tags
 * 
 * @member {string} [gatewayId] Gateway id which will manage this node
 * 
 * @member {string} [connectionName] myhost.domain.com
 * 
 * @member {string} [userName] User name to be used to connect to node
 * 
 * @member {string} [password] Password associated with user name
 * 
 */
export interface NodeParameters {
    location?: string;
    tags?: any;
    gatewayId?: string;
    connectionName?: string;
    userName?: string;
    password?: string;
}

/**
 * @class
 * Initializes a new instance of the SessionResource class.
 * @constructor
 * the session object
 * @member {string} [userName] the username connecting to the session
 * 
 * @member {date} [created] UTC date and time when node was first added to
 * management service
 * 
 * @member {date} [updated] UTC date and time when node was last updated.
 * 
 */
export interface SessionResource extends Resource {
    userName?: string;
    created?: Date;
    updated?: Date;
}

/**
 * @class
 * Initializes a new instance of the SessionParameters class.
 * @constructor
 * @member {string} [userName] User name to be used to connect to node
 * 
 * @member {string} [password] Password associated with user name
 * 
 */
export interface SessionParameters {
    userName?: string;
    password?: string;
}

/**
 * @class
 * Initializes a new instance of the PowerShellSessionResource class.
 * @constructor
 * A powershell session resource (practically equivalent to a runspace
 * instance)
 * @member {string} [sessionId] the PowerShell Session Id.
 * 
 * @member {string} [state] The runspace state.
 * 
 * @member {string} [runspaceAvailability] The availability of the runspace.
 * 
 * @member {date} [disconnectedOn] Timestamp of last time the service
 * disconnected from the runspace.
 * 
 * @member {date} [expiresOn] Timestamp when the runspace expires.
 * 
 * @member {object} [version]
 * 
 * @member {number} [version.major] the leftmost number of the version
 * 
 * @member {number} [version.minor] the second leftmost number of the version
 * 
 * @member {number} [version.build] the third number of the version
 * 
 * @member {number} [version.revision] the fourth number of the version
 * 
 * @member {number} [version.majorRevision] the MSW of the fourth part
 * 
 * @member {number} [version.minorRevision] the LSW of the fourth part
 * 
 * @member {string} [powerShellSessionResourceName] Name of the runspace
 * 
 */
export interface PowerShellSessionResource extends Resource {
    sessionId?: string;
    state?: string;
    runspaceAvailability?: string;
    disconnectedOn?: Date;
    expiresOn?: Date;
    version?: Version;
    powerShellSessionResourceName?: string;
}

/**
 * @class
 * Initializes a new instance of the Version class.
 * @constructor
 * A multipart-numeric version number
 * @member {number} [major] the leftmost number of the version
 * 
 * @member {number} [minor] the second leftmost number of the version
 * 
 * @member {number} [build] the third number of the version
 * 
 * @member {number} [revision] the fourth number of the version
 * 
 * @member {number} [majorRevision] the MSW of the fourth part
 * 
 * @member {number} [minorRevision] the LSW of the fourth part
 * 
 */
export interface Version {
    major?: number;
    minor?: number;
    build?: number;
    revision?: number;
    majorRevision?: number;
    minorRevision?: number;
}

/**
 * @class
 * Initializes a new instance of the PowerShellCommandStatus class.
 * @constructor
 * @member {array} [results]
 * 
 * @member {string} [pssession]
 * 
 * @member {string} [command]
 * 
 * @member {boolean} [completed]
 * 
 */
export interface PowerShellCommandStatus extends Resource {
    results?: PowerShellCommandResult[];
    pssession?: string;
    command?: string;
    completed?: boolean;
}

/**
 * @class
 * Initializes a new instance of the PowerShellCommandResults class.
 * @constructor
 * a collection of results from a powershell command
 * @member {array} [results]
 * 
 * @member {string} [pssession]
 * 
 * @member {string} [command]
 * 
 * @member {boolean} [completed]
 * 
 */
export interface PowerShellCommandResults {
    results?: PowerShellCommandResult[];
    pssession?: string;
    command?: string;
    completed?: boolean;
}

/**
 * @class
 * Initializes a new instance of the PowerShellCommandResult class.
 * @constructor
 * @member {number} [messageType] the type of message
 * 
 * @member {string} [foregroundColor] the HTML color string representing the
 * foreground color.
 * 
 * @member {string} [backgroundColor] the HTML color string representing the
 * background color.
 * 
 * @member {string} [value] actual result text from the PowerShell Command
 * 
 * @member {string} [prompt] The interactive prompt message
 * 
 * @member {number} [exitCode] the exit code from a executable that was called
 * from powershell.
 * 
 * @member {number} [id] ID of the prompt message
 * 
 * @member {string} [caption] text that precedes the prompt.
 * 
 * @member {string} [message] text of the prompt.
 * 
 * @member {array} [descriptions] collection of PromptFieldDescription objects
 * that contains the user input
 * 
 */
export interface PowerShellCommandResult {
    messageType?: number;
    foregroundColor?: string;
    backgroundColor?: string;
    value?: string;
    prompt?: string;
    exitCode?: number;
    id?: number;
    caption?: string;
    message?: string;
    descriptions?: PromptFieldDescription[];
}

/**
 * @class
 * Initializes a new instance of the PromptFieldDescription class.
 * @constructor
 * Field description for the implementation of PSHostUserInterface.Prompt
 * @member {string} [name] the name of the prompt
 * 
 * @member {string} [label] the label text of the prompt
 * 
 * @member {string} [helpMessage] the help message of the prompt
 * 
 * @member {boolean} [promptFieldTypeIsList] when set to 'true' the prompt
 * field type is a list of values
 * 
 * @member {string} [promptFieldType] Possible values include: 'String',
 * 'SecureString', 'Credential'
 * 
 */
export interface PromptFieldDescription {
    name?: string;
    label?: string;
    helpMessage?: string;
    promptFieldTypeIsList?: boolean;
    promptFieldType?: string;
}

/**
 * @class
 * Initializes a new instance of the PowerShellSessionResources class.
 * @constructor
 * a collaction of powershell session resources
 * @member {array} [value] Colleciton of powershell session resources
 * 
 * @member {string} [nextLink] the URL to the next set of resources
 * 
 */
export interface PowerShellSessionResources {
    value?: PowerShellSessionResource[];
    nextLink?: string;
}

/**
 * @class
 * Initializes a new instance of the PowerShellCommandParameters class.
 * @constructor
 * the parameters to a powershell script execution command
 * @member {string} [command] Script to execute
 * 
 */
export interface PowerShellCommandParameters {
    command?: string;
}

/**
 * @class
 * Initializes a new instance of the PromptMessageResponse class.
 * @constructor
 * the response to a prompt message
 * @member {array} [response] the list of responses a cmdlet expects
 * 
 */
export interface PromptMessageResponse {
    response?: string[];
}

/**
 * @class
 * Initializes a new instance of the PowerShellTabCompletionParameters class.
 * @constructor
 * @member {string} [command] Command to get tab completion for.
 * 
 */
export interface PowerShellTabCompletionParameters {
    command?: string;
}

/**
 * @class
 * Initializes a new instance of the PowerShellTabCompletionResults class.
 * @constructor
 * an array of strings representing the different values that can be tabbed
 * thru
 * @member {array} [results]
 * 
 */
export interface PowerShellTabCompletionResults {
    results?: string[];
}

/**
 * @class
 * Initializes a new instance of the ErrorModel class.
 * @constructor
 * Error message
 * @member {number} [code]
 * 
 * @member {string} [message]
 * 
 * @member {string} [fields]
 * 
 */
export interface ErrorModel {
    code?: number;
    message?: string;
    fields?: string;
}
