/*
 * Copyright (c) Microsoft Corporation.
 * Licensed under the MIT License.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is regenerated.
 */

import * as coreClient from "@azure/core-client";

/** Billing information related properties of a server. */
export interface Sku {
  /** The name of the sku, e.g. Standard_D32s_v3. */
  name: string;
  /** The tier of the particular SKU, e.g. GeneralPurpose. */
  tier: SkuTier;
}

/** Storage Profile properties of a server */
export interface Storage {
  /** Max storage size allowed for a server. */
  storageSizeGB?: number;
  /** Storage IOPS for a server. */
  iops?: number;
  /** Enable Storage Auto Grow or not. */
  autoGrow?: EnableStatusEnum;
  /**
   * The sku name of the server storage.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly storageSku?: string;
}

/** Storage Profile properties of a server */
export interface Backup {
  /** Backup retention days for the server. */
  backupRetentionDays?: number;
  /** Whether or not geo redundant backup is enabled. */
  geoRedundantBackup?: EnableStatusEnum;
  /**
   * Earliest restore point creation time (ISO8601 format)
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly earliestRestoreDate?: Date;
}

/** Network related properties of a server */
export interface HighAvailability {
  /** High availability mode for a server. */
  mode?: HighAvailabilityMode;
  /**
   * The state of server high availability.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly state?: HighAvailabilityState;
  /** Availability zone of the standby server. */
  standbyAvailabilityZone?: string;
}

/** Network related properties of a server */
export interface Network {
  /**
   * Whether or not public network access is allowed for this server. Value is 'Disabled' when server has VNet integration.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly publicNetworkAccess?: EnableStatusEnum;
  /** Delegated subnet resource id used to setup vnet for a server. */
  delegatedSubnetResourceId?: string;
  /** Private DNS zone resource id. */
  privateDnsZoneResourceId?: string;
}

/** Maintenance window of a server. */
export interface MaintenanceWindow {
  /** indicates whether custom window is enabled or disabled */
  customWindow?: string;
  /** start hour for maintenance window */
  startHour?: number;
  /** start minute for maintenance window */
  startMinute?: number;
  /** day of week for maintenance window */
  dayOfWeek?: number;
}

/** Metadata pertaining to creation and last modification of the resource. */
export interface SystemData {
  /** The identity that created the resource. */
  createdBy?: string;
  /** The type of identity that created the resource. */
  createdByType?: CreatedByType;
  /** The timestamp of resource creation (UTC). */
  createdAt?: Date;
  /** The identity that last modified the resource. */
  lastModifiedBy?: string;
  /** The type of identity that last modified the resource. */
  lastModifiedByType?: CreatedByType;
  /** The timestamp of resource last modification (UTC) */
  lastModifiedAt?: Date;
}

/** Common fields that are returned in the response for all Azure Resource Manager resources */
export interface Resource {
  /**
   * Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly id?: string;
  /**
   * The name of the resource
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly name?: string;
  /**
   * The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly type?: string;
}

/** An error response from the Batch service. */
export interface CloudError {
  /** The resource management error response. */
  error?: ErrorResponse;
}

/** Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.) */
export interface ErrorResponse {
  /**
   * The error code.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly code?: string;
  /**
   * The error message.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly message?: string;
  /**
   * The error target.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly target?: string;
  /**
   * The error details.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly details?: ErrorResponse[];
  /**
   * The error additional info.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly additionalInfo?: ErrorAdditionalInfo[];
}

/** The resource management error additional info. */
export interface ErrorAdditionalInfo {
  /**
   * The additional info type.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly type?: string;
  /**
   * The additional info.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly info?: Record<string, unknown>;
}

/** Parameters allowed to update for a server. */
export interface ServerForUpdate {
  /** The SKU (pricing tier) of the server. */
  sku?: Sku;
  /** Application-specific metadata in the form of key-value pairs. */
  tags?: { [propertyName: string]: string };
  /**
   * The password of the administrator login.
   * This value contains a credential. Consider obscuring before showing to users
   */
  administratorLoginPassword?: string;
  /** Storage related properties of a server. */
  storage?: Storage;
  /** Backup related properties of a server. */
  backup?: Backup;
  /** High availability related properties of a server. */
  highAvailability?: HighAvailability;
  /** Maintenance window of a server. */
  maintenanceWindow?: MaintenanceWindow;
  /** The replication role of the server. */
  replicationRole?: ReplicationRole;
}

/** A list of servers. */
export interface ServerListResult {
  /** The list of servers */
  value?: Server[];
  /** The link used to get the next page of operations. */
  nextLink?: string;
}

/** Server restart parameters. */
export interface ServerRestartParameter {
  /** Whether or not failover to standby server when restarting a server with high availability enabled. */
  restartWithFailover?: EnableStatusEnum;
  /** The maximum allowed failover time in seconds. */
  maxFailoverSeconds?: number;
}

/** A list of server backups. */
export interface ServerBackupListResult {
  /** The list of backups of a server. */
  value?: ServerBackup[];
  /** The link used to get the next page of operations. */
  nextLink?: string;
}

/** A list of firewall rules. */
export interface FirewallRuleListResult {
  /** The list of firewall rules in a server. */
  value?: FirewallRule[];
  /** The link used to get the next page of operations. */
  nextLink?: string;
}

/** A List of databases. */
export interface DatabaseListResult {
  /** The list of databases housed in a server */
  value?: Database[];
  /** The link used to get the next page of operations. */
  nextLink?: string;
}

/** A list of server configurations to update. */
export interface ConfigurationListForBatchUpdate {
  /** The list of server configurations. */
  value?: ConfigurationForBatchUpdate[];
}

/** Represents a Configuration. */
export interface ConfigurationForBatchUpdate {
  /** Name of the configuration. */
  name?: string;
  /** Value of the configuration. */
  value?: string;
  /** Source of the configuration. */
  source?: string;
}

/** A list of server configurations. */
export interface ConfigurationListResult {
  /** The list of server configurations. */
  value?: Configuration[];
  /** The link used to get the next page of operations. */
  nextLink?: string;
}

/** location capability */
export interface CapabilitiesListResult {
  /**
   * A list of supported capabilities.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly value?: CapabilityProperties[];
  /**
   * Link to retrieve next page of results.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly nextLink?: string;
}

/** Location capabilities. */
export interface CapabilityProperties {
  /**
   * zone name
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly zone?: string;
  /**
   * Supported high availability mode
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedHAMode?: string[];
  /**
   * supported geo backup regions
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedGeoBackupRegions?: string[];
  /**
   * A list of supported flexible server editions.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedFlexibleServerEditions?: ServerEditionCapability[];
}

/** Server edition capabilities. */
export interface ServerEditionCapability {
  /**
   * Server edition name
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly name?: string;
  /**
   * A list of supported storage editions
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedStorageEditions?: StorageEditionCapability[];
  /**
   * A list of supported server versions.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedServerVersions?: ServerVersionCapability[];
}

/** storage edition capability */
export interface StorageEditionCapability {
  /**
   * storage edition name
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly name?: string;
  /**
   * The minimal supported storage size.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly minStorageSize?: number;
  /**
   * The maximum supported storage size.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly maxStorageSize?: number;
  /**
   * Minimal backup retention days
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly minBackupRetentionDays?: number;
  /**
   * Maximum backup retention days
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly maxBackupRetentionDays?: number;
}

/** Server version capabilities. */
export interface ServerVersionCapability {
  /**
   * server version
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly name?: string;
  /**
   * A list of supported Skus
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedSkus?: SkuCapability[];
}

/** Sku capability */
export interface SkuCapability {
  /**
   * vCore name
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly name?: string;
  /**
   * supported vCores
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly vCores?: number;
  /**
   * supported IOPS
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedIops?: number;
  /**
   * supported memory per vCore in MB
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly supportedMemoryPerVCoreMB?: number;
}

/** Virtual network subnet usage parameter */
export interface VirtualNetworkSubnetUsageParameter {
  /** Virtual network resource id. */
  virtualNetworkResourceId?: string;
}

/** Virtual network subnet usage data. */
export interface VirtualNetworkSubnetUsageResult {
  /**
   * A list of delegated subnet usage
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly delegatedSubnetsUsage?: DelegatedSubnetUsage[];
}

/** Delegated subnet usage data. */
export interface DelegatedSubnetUsage {
  /**
   * name of the subnet
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly subnetName?: string;
  /**
   * Number of used delegated subnets
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly usage?: number;
}

/** Request from client to check resource name availability. */
export interface NameAvailabilityRequest {
  /** Resource name to verify. */
  name: string;
  /** Resource type used for verification. */
  type?: string;
}

/** Represents a resource name availability. */
export interface NameAvailability {
  /** Error Message. */
  message?: string;
  /** Indicates whether the resource name is available. */
  nameAvailable?: boolean;
  /** Reason for name being unavailable. */
  reason?: string;
}

/** The response of get private dns zone suffix. */
export interface GetPrivateDnsZoneSuffixResponse {
  /** Represents the private DNS zone suffix. */
  privateDnsZoneSuffix?: string;
}

/** A list of resource provider operations. */
export interface OperationListResult {
  /** Collection of available operation details */
  value?: Operation[];
  /** URL client should use to fetch the next page (per server side paging). */
  nextLink?: string;
}

/** REST API operation definition. */
export interface Operation {
  /** The name of the operation being performed on this particular object. */
  name?: string;
  /** The localized display information for this particular operation or action. */
  display?: OperationDisplay;
  /** The intended executor of the operation. */
  origin?: string;
  /** Additional descriptions for the operation. */
  properties?: { [propertyName: string]: Record<string, unknown> };
}

/** Display metadata associated with the operation. */
export interface OperationDisplay {
  /** Operation resource provider name. */
  provider?: string;
  /** Resource on which the operation is performed. */
  resource?: string;
  /** Localized friendly name for the operation. */
  operation?: string;
  /** Operation description. */
  description?: string;
}

/** The resource model definition for an Azure Resource Manager tracked top level resource which has 'tags' and a 'location' */
export interface TrackedResource extends Resource {
  /** Resource tags. */
  tags?: { [propertyName: string]: string };
  /** The geo-location where the resource lives */
  location: string;
}

/** The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a location */
export interface ProxyResource extends Resource {}

/** Represents a server. */
export interface Server extends TrackedResource {
  /** The SKU (pricing tier) of the server. */
  sku?: Sku;
  /**
   * The system metadata relating to this resource.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly systemData?: SystemData;
  /** The administrator's login name of a server. Can only be specified when the server is being created (and is required for creation). */
  administratorLogin?: string;
  /**
   * The password of the administrator login (required for server creation).
   * This value contains a credential. Consider obscuring before showing to users
   */
  administratorLoginPassword?: string;
  /** Server version. */
  version?: ServerVersion;
  /** availability Zone information of the server. */
  availabilityZone?: string;
  /** The mode to create a new MySQL server. */
  createMode?: CreateMode;
  /** The source MySQL server id. */
  sourceServerResourceId?: string;
  /** Restore point creation time (ISO8601 format), specifying the time to restore from. */
  restorePointInTime?: Date;
  /** The replication role. */
  replicationRole?: ReplicationRole;
  /**
   * The maximum number of replicas that a primary server can have.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly replicaCapacity?: number;
  /**
   * The state of a server.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly state?: ServerState;
  /**
   * The fully qualified domain name of a server.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly fullyQualifiedDomainName?: string;
  /** Storage related properties of a server. */
  storage?: Storage;
  /** Backup related properties of a server. */
  backup?: Backup;
  /** High availability related properties of a server. */
  highAvailability?: HighAvailability;
  /** Network related properties of a server. */
  network?: Network;
  /** Maintenance window of a server. */
  maintenanceWindow?: MaintenanceWindow;
}

/** Server backup properties */
export interface ServerBackup extends ProxyResource {
  /**
   * The system metadata relating to this resource.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly systemData?: SystemData;
  /** Backup type. */
  backupType?: string;
  /** Backup completed time (ISO8601 format). */
  completedTime?: Date;
  /** Backup source */
  source?: string;
}

/** Represents a server firewall rule. */
export interface FirewallRule extends ProxyResource {
  /**
   * The system metadata relating to this resource.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly systemData?: SystemData;
  /** The start IP address of the server firewall rule. Must be IPv4 format. */
  startIpAddress: string;
  /** The end IP address of the server firewall rule. Must be IPv4 format. */
  endIpAddress: string;
}

/** Represents a Database. */
export interface Database extends ProxyResource {
  /**
   * The system metadata relating to this resource.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly systemData?: SystemData;
  /** The charset of the database. */
  charset?: string;
  /** The collation of the database. */
  collation?: string;
}

/** Represents a Configuration. */
export interface Configuration extends ProxyResource {
  /**
   * The system metadata relating to this resource.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly systemData?: SystemData;
  /** Value of the configuration. */
  value?: string;
  /**
   * Description of the configuration.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly description?: string;
  /**
   * Default value of the configuration.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly defaultValue?: string;
  /**
   * Data type of the configuration.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly dataType?: string;
  /**
   * Allowed values of the configuration.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly allowedValues?: string;
  /** Source of the configuration. */
  source?: ConfigurationSource;
  /**
   * If is the configuration read only.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly isReadOnly?: IsReadOnly;
  /**
   * If is the configuration pending restart or not.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly isConfigPendingRestart?: IsConfigPendingRestart;
  /**
   * If is the configuration dynamic.
   * NOTE: This property will not be serialized. It can only be populated by the server.
   */
  readonly isDynamicConfig?: IsDynamicConfig;
}

/** Known values of {@link SkuTier} that the service accepts. */
export enum KnownSkuTier {
  /** Burstable */
  Burstable = "Burstable",
  /** GeneralPurpose */
  GeneralPurpose = "GeneralPurpose",
  /** MemoryOptimized */
  MemoryOptimized = "MemoryOptimized"
}

/**
 * Defines values for SkuTier. \
 * {@link KnownSkuTier} can be used interchangeably with SkuTier,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **Burstable** \
 * **GeneralPurpose** \
 * **MemoryOptimized**
 */
export type SkuTier = string;

/** Known values of {@link ServerVersion} that the service accepts. */
export enum KnownServerVersion {
  /** Five7 */
  Five7 = "5.7",
  /** Eight021 */
  Eight021 = "8.0.21"
}

/**
 * Defines values for ServerVersion. \
 * {@link KnownServerVersion} can be used interchangeably with ServerVersion,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **5.7** \
 * **8.0.21**
 */
export type ServerVersion = string;

/** Known values of {@link CreateMode} that the service accepts. */
export enum KnownCreateMode {
  /** Default */
  Default = "Default",
  /** PointInTimeRestore */
  PointInTimeRestore = "PointInTimeRestore",
  /** Replica */
  Replica = "Replica",
  /** GeoRestore */
  GeoRestore = "GeoRestore"
}

/**
 * Defines values for CreateMode. \
 * {@link KnownCreateMode} can be used interchangeably with CreateMode,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **Default** \
 * **PointInTimeRestore** \
 * **Replica** \
 * **GeoRestore**
 */
export type CreateMode = string;

/** Known values of {@link ReplicationRole} that the service accepts. */
export enum KnownReplicationRole {
  /** None */
  None = "None",
  /** Source */
  Source = "Source",
  /** Replica */
  Replica = "Replica"
}

/**
 * Defines values for ReplicationRole. \
 * {@link KnownReplicationRole} can be used interchangeably with ReplicationRole,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **None** \
 * **Source** \
 * **Replica**
 */
export type ReplicationRole = string;

/** Known values of {@link ServerState} that the service accepts. */
export enum KnownServerState {
  /** Ready */
  Ready = "Ready",
  /** Dropping */
  Dropping = "Dropping",
  /** Disabled */
  Disabled = "Disabled",
  /** Starting */
  Starting = "Starting",
  /** Stopping */
  Stopping = "Stopping",
  /** Stopped */
  Stopped = "Stopped",
  /** Updating */
  Updating = "Updating"
}

/**
 * Defines values for ServerState. \
 * {@link KnownServerState} can be used interchangeably with ServerState,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **Ready** \
 * **Dropping** \
 * **Disabled** \
 * **Starting** \
 * **Stopping** \
 * **Stopped** \
 * **Updating**
 */
export type ServerState = string;

/** Known values of {@link EnableStatusEnum} that the service accepts. */
export enum KnownEnableStatusEnum {
  /** Enabled */
  Enabled = "Enabled",
  /** Disabled */
  Disabled = "Disabled"
}

/**
 * Defines values for EnableStatusEnum. \
 * {@link KnownEnableStatusEnum} can be used interchangeably with EnableStatusEnum,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **Enabled** \
 * **Disabled**
 */
export type EnableStatusEnum = string;

/** Known values of {@link HighAvailabilityMode} that the service accepts. */
export enum KnownHighAvailabilityMode {
  /** Disabled */
  Disabled = "Disabled",
  /** ZoneRedundant */
  ZoneRedundant = "ZoneRedundant",
  /** SameZone */
  SameZone = "SameZone"
}

/**
 * Defines values for HighAvailabilityMode. \
 * {@link KnownHighAvailabilityMode} can be used interchangeably with HighAvailabilityMode,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **Disabled** \
 * **ZoneRedundant** \
 * **SameZone**
 */
export type HighAvailabilityMode = string;

/** Known values of {@link HighAvailabilityState} that the service accepts. */
export enum KnownHighAvailabilityState {
  /** NotEnabled */
  NotEnabled = "NotEnabled",
  /** CreatingStandby */
  CreatingStandby = "CreatingStandby",
  /** Healthy */
  Healthy = "Healthy",
  /** FailingOver */
  FailingOver = "FailingOver",
  /** RemovingStandby */
  RemovingStandby = "RemovingStandby"
}

/**
 * Defines values for HighAvailabilityState. \
 * {@link KnownHighAvailabilityState} can be used interchangeably with HighAvailabilityState,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **NotEnabled** \
 * **CreatingStandby** \
 * **Healthy** \
 * **FailingOver** \
 * **RemovingStandby**
 */
export type HighAvailabilityState = string;

/** Known values of {@link CreatedByType} that the service accepts. */
export enum KnownCreatedByType {
  /** User */
  User = "User",
  /** Application */
  Application = "Application",
  /** ManagedIdentity */
  ManagedIdentity = "ManagedIdentity",
  /** Key */
  Key = "Key"
}

/**
 * Defines values for CreatedByType. \
 * {@link KnownCreatedByType} can be used interchangeably with CreatedByType,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **User** \
 * **Application** \
 * **ManagedIdentity** \
 * **Key**
 */
export type CreatedByType = string;

/** Known values of {@link ConfigurationSource} that the service accepts. */
export enum KnownConfigurationSource {
  /** SystemDefault */
  SystemDefault = "system-default",
  /** UserOverride */
  UserOverride = "user-override"
}

/**
 * Defines values for ConfigurationSource. \
 * {@link KnownConfigurationSource} can be used interchangeably with ConfigurationSource,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **system-default** \
 * **user-override**
 */
export type ConfigurationSource = string;

/** Known values of {@link IsReadOnly} that the service accepts. */
export enum KnownIsReadOnly {
  /** True */
  True = "True",
  /** False */
  False = "False"
}

/**
 * Defines values for IsReadOnly. \
 * {@link KnownIsReadOnly} can be used interchangeably with IsReadOnly,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **True** \
 * **False**
 */
export type IsReadOnly = string;

/** Known values of {@link IsConfigPendingRestart} that the service accepts. */
export enum KnownIsConfigPendingRestart {
  /** True */
  True = "True",
  /** False */
  False = "False"
}

/**
 * Defines values for IsConfigPendingRestart. \
 * {@link KnownIsConfigPendingRestart} can be used interchangeably with IsConfigPendingRestart,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **True** \
 * **False**
 */
export type IsConfigPendingRestart = string;

/** Known values of {@link IsDynamicConfig} that the service accepts. */
export enum KnownIsDynamicConfig {
  /** True */
  True = "True",
  /** False */
  False = "False"
}

/**
 * Defines values for IsDynamicConfig. \
 * {@link KnownIsDynamicConfig} can be used interchangeably with IsDynamicConfig,
 *  this enum contains the known values that the service supports.
 * ### Known values supported by the service
 * **True** \
 * **False**
 */
export type IsDynamicConfig = string;

/** Optional parameters. */
export interface ServersCreateOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Contains response data for the create operation. */
export type ServersCreateResponse = Server;

/** Optional parameters. */
export interface ServersUpdateOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Contains response data for the update operation. */
export type ServersUpdateResponse = Server;

/** Optional parameters. */
export interface ServersDeleteOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface ServersGetOptionalParams extends coreClient.OperationOptions {}

/** Contains response data for the get operation. */
export type ServersGetResponse = Server;

/** Optional parameters. */
export interface ServersListByResourceGroupOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByResourceGroup operation. */
export type ServersListByResourceGroupResponse = ServerListResult;

/** Optional parameters. */
export interface ServersListOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the list operation. */
export type ServersListResponse = ServerListResult;

/** Optional parameters. */
export interface ServersFailoverOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface ServersRestartOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface ServersStartOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface ServersStopOptionalParams extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface ServersListByResourceGroupNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByResourceGroupNext operation. */
export type ServersListByResourceGroupNextResponse = ServerListResult;

/** Optional parameters. */
export interface ServersListNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listNext operation. */
export type ServersListNextResponse = ServerListResult;

/** Optional parameters. */
export interface ReplicasListByServerOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServer operation. */
export type ReplicasListByServerResponse = ServerListResult;

/** Optional parameters. */
export interface ReplicasListByServerNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServerNext operation. */
export type ReplicasListByServerNextResponse = ServerListResult;

/** Optional parameters. */
export interface BackupsGetOptionalParams extends coreClient.OperationOptions {}

/** Contains response data for the get operation. */
export type BackupsGetResponse = ServerBackup;

/** Optional parameters. */
export interface BackupsListByServerOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServer operation. */
export type BackupsListByServerResponse = ServerBackupListResult;

/** Optional parameters. */
export interface BackupsListByServerNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServerNext operation. */
export type BackupsListByServerNextResponse = ServerBackupListResult;

/** Optional parameters. */
export interface FirewallRulesCreateOrUpdateOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Contains response data for the createOrUpdate operation. */
export type FirewallRulesCreateOrUpdateResponse = FirewallRule;

/** Optional parameters. */
export interface FirewallRulesDeleteOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface FirewallRulesGetOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the get operation. */
export type FirewallRulesGetResponse = FirewallRule;

/** Optional parameters. */
export interface FirewallRulesListByServerOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServer operation. */
export type FirewallRulesListByServerResponse = FirewallRuleListResult;

/** Optional parameters. */
export interface FirewallRulesListByServerNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServerNext operation. */
export type FirewallRulesListByServerNextResponse = FirewallRuleListResult;

/** Optional parameters. */
export interface DatabasesCreateOrUpdateOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Contains response data for the createOrUpdate operation. */
export type DatabasesCreateOrUpdateResponse = Database;

/** Optional parameters. */
export interface DatabasesDeleteOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Optional parameters. */
export interface DatabasesGetOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the get operation. */
export type DatabasesGetResponse = Database;

/** Optional parameters. */
export interface DatabasesListByServerOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServer operation. */
export type DatabasesListByServerResponse = DatabaseListResult;

/** Optional parameters. */
export interface DatabasesListByServerNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServerNext operation. */
export type DatabasesListByServerNextResponse = DatabaseListResult;

/** Optional parameters. */
export interface ConfigurationsUpdateOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Contains response data for the update operation. */
export type ConfigurationsUpdateResponse = Configuration;

/** Optional parameters. */
export interface ConfigurationsGetOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the get operation. */
export type ConfigurationsGetResponse = Configuration;

/** Optional parameters. */
export interface ConfigurationsBatchUpdateOptionalParams
  extends coreClient.OperationOptions {
  /** Delay to wait until next poll, in milliseconds. */
  updateIntervalInMs?: number;
  /** A serialized poller which can be used to resume an existing paused Long-Running-Operation. */
  resumeFrom?: string;
}

/** Contains response data for the batchUpdate operation. */
export type ConfigurationsBatchUpdateResponse = ConfigurationListResult;

/** Optional parameters. */
export interface ConfigurationsListByServerOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServer operation. */
export type ConfigurationsListByServerResponse = ConfigurationListResult;

/** Optional parameters. */
export interface ConfigurationsListByServerNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listByServerNext operation. */
export type ConfigurationsListByServerNextResponse = ConfigurationListResult;

/** Optional parameters. */
export interface LocationBasedCapabilitiesListOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the list operation. */
export type LocationBasedCapabilitiesListResponse = CapabilitiesListResult;

/** Optional parameters. */
export interface LocationBasedCapabilitiesListNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listNext operation. */
export type LocationBasedCapabilitiesListNextResponse = CapabilitiesListResult;

/** Optional parameters. */
export interface CheckVirtualNetworkSubnetUsageExecuteOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the execute operation. */
export type CheckVirtualNetworkSubnetUsageExecuteResponse = VirtualNetworkSubnetUsageResult;

/** Optional parameters. */
export interface CheckNameAvailabilityExecuteOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the execute operation. */
export type CheckNameAvailabilityExecuteResponse = NameAvailability;

/** Optional parameters. */
export interface GetPrivateDnsZoneSuffixExecuteOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the execute operation. */
export type GetPrivateDnsZoneSuffixExecuteResponse = GetPrivateDnsZoneSuffixResponse;

/** Optional parameters. */
export interface OperationsListOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the list operation. */
export type OperationsListResponse = OperationListResult;

/** Optional parameters. */
export interface OperationsListNextOptionalParams
  extends coreClient.OperationOptions {}

/** Contains response data for the listNext operation. */
export type OperationsListNextResponse = OperationListResult;

/** Optional parameters. */
export interface MySQLManagementFlexibleServerClientOptionalParams
  extends coreClient.ServiceClientOptions {
  /** server parameter */
  $host?: string;
  /** Api Version */
  apiVersion?: string;
  /** Overrides client endpoint. */
  endpoint?: string;
}
