/*
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

import * as moment from "moment";


/**
 * @class
 * Initializes a new instance of the AnalyticsReleasesParameter class.
 * @constructor
 * @member {string} releaseId release id
 * @member {string} distributionGroupId distribution group id
 * @member {uuid} userId user id
 */
export interface AnalyticsReleasesParameter {
  releaseId: string;
  distributionGroupId: string;
  userId: string;
}

/**
 * @class
 * Initializes a new instance of the AnalyticsReleasesResponse class.
 * @constructor
 * @member {array} [releases]
 */
export interface AnalyticsReleasesResponse {
  releases?: AnalyticsReleasesParameter[];
}

/**
 * @class
 * Initializes a new instance of the AppleMappingRequest class.
 * @constructor
 * Apple Mapping Request Type
 *
 * @member {string} serviceConnectionId Id for the shared service connection.
 * In case of Apple AppStore, this connection will be used to create and
 * connect to the Apple AppStore in Mobile Center.
 * @member {string} [appleId] ID of the apple application in apple store, takes
 * precedence over bundle_identifier when both are provided
 * @member {string} [bundleIdentifier] Bundle Identifier of the apple package
 * @member {string} teamIdentifier ID of the Team associated with the app in
 * apple store
 */
export interface AppleMappingRequest {
  serviceConnectionId: string;
  appleId?: string;
  bundleIdentifier?: string;
  teamIdentifier: string;
}

/**
 * @class
 * Initializes a new instance of the AppleMappingResponse class.
 * @constructor
 * Apple Mapping Request Type
 *
 * @member {string} [appId] ID of the apple application in Mobile Center
 * @member {string} [serviceConnectionId] Id for the shared service connection.
 * In case of Apple AppStore, this connection will be used to create and
 * connect to the Apple AppStore in Mobile Center.
 * @member {string} [appleId] ID of the apple application in apple store
 * @member {string} [teamIdentifier] ID of the Team associated with the app in
 * apple store
 */
export interface AppleMappingResponse {
  appId?: string;
  serviceConnectionId?: string;
  appleId?: string;
  teamIdentifier?: string;
}

/**
 * @class
 * Initializes a new instance of the AppleTestFlightGroupsResponse class.
 * @constructor
 * Apple Test Flight Groups Response Type
 *
 * @member {string} [id] id of the group.
 * @member {number} [providerId] provider id of the group.
 * @member {number} [appleId] apple id of the group.
 * @member {string} [name] name of the group.
 */
export interface AppleTestFlightGroupsResponse {
  id?: string;
  providerId?: number;
  appleId?: number;
  name?: string;
}

/**
 * @class
 * Initializes a new instance of the DestinationId class.
 * @constructor
 * A unique identifier for a destination. A destination can be identified by an
 * ID (guid) or by a name. DestinationId encapsulates both options. A
 * destination can be either a distribution group or a store.
 *
 * @member {string} [name] Name of a distribution group / distribution store.
 * The release will be associated with this distribution group or store. If the
 * distribution group / store doesn't exist a 400 is returned. If both
 * distribution group / store name and id are passed, the id is taking
 * precedence.
 * @member {string} [id] Id of a distribution group / store. The release will
 * be associated with this distribution group / store. If the distribution
 * group / store doesn't exist a 400 is returned. If both distribution group /
 * store name and id are passed, the id is taking precedence.
 */
export interface DestinationId {
  name?: string;
  id?: string;
}

/**
 * @class
 * Initializes a new instance of the DistributionGroup class.
 * @constructor
 * @member {boolean} [isLatest] Is the containing release the latest one in
 * this distribution group.
 */
export interface DistributionGroup extends DestinationId {
  isLatest?: boolean;
}

/**
 * @class
 * Initializes a new instance of the DistributionStore class.
 * @constructor
 * @member {boolean} [isLatest] Is the containing release the latest one in
 * this distribution store.
 * @member {string} [type] type of the distribution store currently stores type
 * can be intune, googleplay or windows. Possible values include: 'intune',
 * 'googleplay', 'windows'
 * @member {string} [publishingStatus] publishing status of the release in the
 * store.
 */
export interface DistributionStore extends DestinationId {
  isLatest?: boolean;
  type?: string;
  publishingStatus?: string;
}

/**
 * @class
 * Initializes a new instance of the Destination class.
 * @constructor
 * @member {boolean} [isLatest] Is the containing release the latest one in
 * this distribution group.
 * @member {string} [type] type of the distribution store currently stores type
 * can be intune, googleplay or windows. Possible values include: 'intune',
 * 'googleplay', 'windows'
 * @member {string} [publishingStatus] publishing status of the release in the
 * store.
 * @member {string} [destinationType] Destination can be either store or group.
 * Possible values include: 'group', 'store'
 */
export interface Destination {
  isLatest?: boolean;
  type?: string;
  publishingStatus?: string;
  destinationType?: string;
}

/**
 * @class
 * Initializes a new instance of the BasicReleaseDetailsResponse class.
 * @constructor
 * Basic information on a release
 *
 * @member {number} [id] ID identifying this unique release.
 * @member {string} [version] The release's version.<br>
 * For iOS: CFBundleVersion from info.plist.<br>
 * For Android: android:versionCode from AppManifest.xml.
 * @member {string} [shortVersion] The release's short version.<br>
 * For iOS: CFBundleShortVersionString from info.plist.<br>
 * For Android: android:versionName from AppManifest.xml.
 * @member {string} [uploadedAt] UTC time in ISO 8601 format of the uploaded
 * time.
 * @member {string} [destinationType] OBSOLETE. Will be removed in next
 * version. The destination type.<br>
 * <b>group</b>: The release distributed to internal groups and
 * distribution_groups details will be returned.<br>
 * <b>store</b>: The release distributed to external stores and
 * distribution_stores details will be returned. <br>
 * . Possible values include: 'group', 'store'
 * @member {array} [distributionGroups] OBSOLETE. Will be removed in next
 * version. A list of distribution groups that are associated with this
 * release.
 * @member {array} [distributionStores] OBSOLETE. Will be removed in next
 * version. A list of distribution stores that are associated with this
 * release.
 * @member {array} [destinations] A list of distribution groups or stores.
 */
export interface BasicReleaseDetailsResponse {
  id?: number;
  version?: string;
  shortVersion?: string;
  uploadedAt?: string;
  destinationType?: string;
  distributionGroups?: DistributionGroup[];
  distributionStores?: DistributionStore[];
  destinations?: Destination[];
}

/**
 * @class
 * Initializes a new instance of the DeviceInfoRequest class.
 * @constructor
 * The information for a single iOS device
 *
 * @member {string} udid The Unique Device IDentifier of the device
 * @member {string} model The model identifier of the device, in the format
 * iDeviceM,N
 * @member {string} [osBuild] The build number of the last known OS version
 * running on the device
 * @member {string} [osVersion] The last known OS version running on the device
 * @member {string} [serial] The device's serial number. Always empty or
 * undefined at present.
 * @member {string} [imei] The device's International Mobile Equipment Identity
 * number. Always empty or undefined at present.
 * @member {string} [ownerId] The user ID of the device owner.
 */
export interface DeviceInfoRequest {
  udid: string;
  model: string;
  osBuild?: string;
  osVersion?: string;
  serial?: string;
  imei?: string;
  ownerId?: string;
}

/**
 * @class
 * Initializes a new instance of the DeviceInfoResponse class.
 * @constructor
 * The information for a single iOS device
 *
 * @member {string} udid The Unique Device IDentifier of the device
 * @member {string} model The model identifier of the device, in the format
 * iDeviceM,N
 * @member {string} deviceName The device description, in the format "iPhone 7
 * Plus (A1784)"
 * @member {string} [fullDeviceName] A combination of the device model name and
 * the owner name.
 * @member {string} osBuild The last known OS version running on the device
 * @member {string} osVersion The last known OS version running on the device
 * @member {string} [serial] The device's serial number. Always empty or
 * undefined at present.
 * @member {string} [imei] The device's International Mobile Equipment Identity
 * number. Always empty or undefined at present.
 * @member {string} [ownerId] The user ID of the device owner.
 * @member {string} status The provisioning status of the device.
 */
export interface DeviceInfoResponse {
  udid: string;
  model: string;
  deviceName: string;
  fullDeviceName?: string;
  osBuild: string;
  osVersion: string;
  serial?: string;
  imei?: string;
  ownerId?: string;
  status: string;
}

/**
 * @class
 * Initializes a new instance of the DistributionGroupRelease class.
 * @constructor
 * Response for getting a list of releases in a distribution group
 *
 * @member {number} [id] ID identifying this unique release.
 * @member {string} [version] The release's version.<br>
 * For iOS: CFBundleVersion from info.plist.<br>
 * For Android: android:versionCode from AppManifest.xml.
 * @member {string} [shortVersion] The release's short version.<br>
 * For iOS: CFBundleShortVersionString from info.plist.<br>
 * For Android: android:versionName from AppManifest.xml.
 * @member {string} [uploadedAt] UTC time in ISO 8601 format of the uploaded
 * time.
 */
export interface DistributionGroupRelease {
  id?: number;
  version?: string;
  shortVersion?: string;
  uploadedAt?: string;
}

/**
 * @class
 * Initializes a new instance of the DistributionGroupWithoutIsLatest class.
 * @constructor
 * @member {string} [id] ID identifying a unique distribution group.
 * @member {string} [name] A name identifying a unique distribution group.
 */
export interface DistributionGroupWithoutIsLatest {
  id?: string;
  name?: string;
}

/**
 * @class
 * Initializes a new instance of the DistributionStoreWithoutIsLatest class.
 * @constructor
 * @member {string} [id] ID identifying a unique distribution store.
 * @member {string} [name] A name identifying a unique distribution store.
 * @member {string} [type] type of the distribution store currently stores type
 * can be intune, googleplay or windows. Possible values include: 'intune',
 * 'googleplay', 'windows'
 * @member {string} [publishingStatus] publishing status of the release in the
 * store.
 */
export interface DistributionStoreWithoutIsLatest {
  id?: string;
  name?: string;
  type?: string;
  publishingStatus?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneSecretDetails class.
 * @constructor
 * @member {string} [idToken] the id token of user
 * @member {string} [refreshToken] the refresh token for user
 * @member {string} [refreshTokenExpiry] the expiry of refresh token
 */
export interface IntuneSecretDetails {
  idToken?: string;
  refreshToken?: string;
  refreshTokenExpiry?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneTargetAudience class.
 * @constructor
 * @member {string} [name] display name for the target audience/group
 */
export interface IntuneTargetAudience {
  name?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneAppCategory class.
 * @constructor
 * @member {string} [name] display name for the app category
 */
export interface IntuneAppCategory {
  name?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneStoreRequest class.
 * @constructor
 * @member {object} [secretJson]
 * @member {string} [secretJson.idToken] the id token of user
 * @member {string} [secretJson.refreshToken] the refresh token for user
 * @member {string} [secretJson.refreshTokenExpiry] the expiry of refresh token
 * @member {object} [targetAudience]
 * @member {string} [targetAudience.name] display name for the target
 * audience/group
 * @member {object} [appCategory]
 * @member {string} [appCategory.name] display name for the app category
 * @member {string} [tenantId] tenant id of the intune store
 */
export interface IntuneStoreRequest {
  secretJson?: IntuneSecretDetails;
  targetAudience?: IntuneTargetAudience;
  appCategory?: IntuneAppCategory;
  tenantId?: string;
}

/**
 * @class
 * Initializes a new instance of the WindowsSecretDetails class.
 * @constructor
 * @member {string} [idToken] the id token of user
 * @member {string} [refreshToken] the refresh token for user
 * @member {string} [refreshTokenExpiry] the expiry of refresh token
 */
export interface WindowsSecretDetails {
  idToken?: string;
  refreshToken?: string;
  refreshTokenExpiry?: string;
}

/**
 * @class
 * Initializes a new instance of the WindowsStoreRequest class.
 * @constructor
 * @member {object} [secretJson]
 * @member {string} [secretJson.idToken] the id token of user
 * @member {string} [secretJson.refreshToken] the refresh token for user
 * @member {string} [secretJson.refreshTokenExpiry] the expiry of refresh token
 * @member {string} [tenantId] tenant id the user account belongs to
 */
export interface WindowsStoreRequest {
  secretJson?: WindowsSecretDetails;
  tenantId?: string;
}

/**
 * @class
 * Initializes a new instance of the ExternalStoreRequest class.
 * @constructor
 * ExternalStoreRequest
 *
 * @member {string} [type] store Type. Possible values include: 'googleplay',
 * 'intune', 'windows', 'apple'
 * @member {string} [name] name of the store. In case of googleplay, windows
 * and Apple store this is fixed to Production.
 * @member {string} [track] track of the store. Can be production, alpha & beta
 * for googleplay. Can be production, testflight-internal & testflight-external
 * for Apple Store. Can be production for Windows Store. Possible values
 * include: 'production', 'alpha', 'beta', 'testflight-internal',
 * 'testflight-external'
 * @member {object} [intuneDetails]
 * @member {object} [intuneDetails.secretJson]
 * @member {string} [intuneDetails.secretJson.idToken] the id token of user
 * @member {string} [intuneDetails.secretJson.refreshToken] the refresh token
 * for user
 * @member {string} [intuneDetails.secretJson.refreshTokenExpiry] the expiry of
 * refresh token
 * @member {object} [intuneDetails.targetAudience]
 * @member {string} [intuneDetails.targetAudience.name] display name for the
 * target audience/group
 * @member {object} [intuneDetails.appCategory]
 * @member {string} [intuneDetails.appCategory.name] display name for the app
 * category
 * @member {string} [intuneDetails.tenantId] tenant id of the intune store
 * @member {object} [windowsDetails]
 * @member {object} [windowsDetails.secretJson]
 * @member {string} [windowsDetails.secretJson.idToken] the id token of user
 * @member {string} [windowsDetails.secretJson.refreshToken] the refresh token
 * for user
 * @member {string} [windowsDetails.secretJson.refreshTokenExpiry] the expiry
 * of refresh token
 * @member {string} [windowsDetails.tenantId] tenant id the user account
 * belongs to
 * @member {string} [serviceConnectionId] Id for the shared service connection.
 * In case of Apple AppStore, this connection will be used to create and
 * connect to the Apple AppStore in Mobile Center.
 */
export interface ExternalStoreRequest {
  type?: string;
  name?: string;
  track?: string;
  intuneDetails?: IntuneStoreRequest;
  windowsDetails?: WindowsStoreRequest;
  serviceConnectionId?: string;
}

/**
 * @class
 * Initializes a new instance of the ExternalStoreResponse class.
 * @constructor
 * ExternalStoreResponse
 *
 * @member {string} [id] Store id
 * @member {string} [name] Store Name
 * @member {string} [type] Store Type
 * @member {string} [track] Store track. Possible values include: 'production',
 * 'alpha', 'beta', 'testflight-internal', 'testflight-external'
 * @member {object} [intuneDetails] store details for intune
 * @member {string} [serviceConnectionId] Id for the shared service connection.
 * In case of Apple AppStore, this connection will be used to create and
 * connect to the Apple AppStore in Mobile Center.
 */
export interface ExternalStoreResponse {
  id?: string;
  name?: string;
  type?: string;
  track?: string;
  intuneDetails?: any;
  serviceConnectionId?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneAppCategoryResponse class.
 * @constructor
 * @member {string} [name] display name for the app category
 * @member {string} [id] ID for the category.
 */
export interface IntuneAppCategoryResponse {
  name?: string;
  id?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneTargetAudienceResponse class.
 * @constructor
 * @member {string} [name] display name for the target audience/group
 * @member {string} [id] ID for the target audience/group.
 */
export interface IntuneTargetAudienceResponse {
  name?: string;
  id?: string;
}

/**
 * @class
 * Initializes a new instance of the IntuneStoreResponse class.
 * @constructor
 * @member {object} [targetAudience]
 * @member {string} [targetAudience.name] display name for the target
 * audience/group
 * @member {string} [targetAudience.id] ID for the target audience/group.
 * @member {object} [appCategory]
 * @member {string} [appCategory.name] display name for the app category
 * @member {string} [appCategory.id] ID for the category.
 */
export interface IntuneStoreResponse {
  targetAudience?: IntuneTargetAudienceResponse;
  appCategory?: IntuneAppCategoryResponse;
}

/**
 * @class
 * Initializes a new instance of the ProvisioningProfileResponse class.
 * @constructor
 * A response containing information about an iOS provisioning profile.
 *
 * @member {string} provisioningProfileType Possible values include: 'adhoc',
 * 'enterprise', 'other'
 * @member {array} [udids]
 * @member {string} [provisioningProfileName] The name of the provisioning
 * profile.
 * @member {string} [teamIdentifier] The team identifier.
 * @member {string} [provisioningBundleId] The bundle identifier associated
 * with the profile.
 * @member {array} [appexProfiles] Array of provisioning profiles for any app
 * extensions
 */
export interface ProvisioningProfileResponse {
  provisioningProfileType: string;
  udids?: string[];
  provisioningProfileName?: string;
  teamIdentifier?: string;
  provisioningBundleId?: string;
  appexProfiles?: ProvisioningProfileResponse[];
}

/**
 * @class
 * Initializes a new instance of the ReleaseDetailsResponse class.
 * @constructor
 * Details of an uploaded release
 *
 * @member {number} [id] ID identifying this unique release.
 * @member {string} [appName] The app's name (extracted from the uploaded
 * release).
 * @member {string} [appDisplayName] The app's display name.
 * @member {string} [version] The release's version.<br>
 * For iOS: CFBundleVersion from info.plist.
 * For Android: android:versionCode from AppManifest.xml.
 * @member {string} [shortVersion] The release's short version.<br>
 * For iOS: CFBundleShortVersionString from info.plist.
 * For Android: android:versionName from AppManifest.xml.
 * @member {string} [releaseNotes] The release's release notes.
 * @member {string} [provisioningProfileName] The release's provisioning
 * profile name.
 * @member {string} [provisioningProfileType] The type of the provisioning
 * profile for the requested app version. Possible values include: 'adhoc',
 * 'enterprise', 'other'
 * @member {boolean} [isProvisioningProfileSyncing] A flag that determines
 * whether the release's provisioning profile is still extracted or not.
 * @member {number} [size] The release's size in bytes.
 * @member {string} [minOs] The release's minimum required operating system.
 * @member {string} [deviceFamily] The release's device family.
 * @member {string} [androidMinApiLevel] The release's minimum required Android
 * API level.
 * @member {string} [bundleIdentifier] The identifier of the apps bundle.
 * @member {string} [fingerprint] MD5 checksum of the release binary.
 * @member {string} [uploadedAt] UTC time in ISO 8601 format of the uploaded
 * time.
 * @member {string} [downloadUrl] The URL that hosts the binary for this
 * release.
 * @member {string} [appIconUrl] A URL to the app's icon.
 * @member {string} [installUrl] The href required to install a release on a
 * mobile device. On iOS devices will be prefixed with
 * `itms-services://?action=download-manifest&url=`
 * @member {string} [destinationType] OBSOLETE. Will be removed in next
 * version. The destination type.<br>
 * <b>group</b>: The release distributed to internal groups and
 * distribution_groups details will be returned.<br>
 * <b>store</b>: The release distributed to external stores and
 * distribution_stores details will be returned.<br>
 * . Possible values include: 'group', 'store'
 * @member {array} [distributionGroups] OBSOLETE. Will be removed in next
 * version. A list of distribution groups that are associated with this
 * release.
 * @member {array} [distributionStores] OBSOLETE. Will be removed in next
 * version. A list of distribution stores that are associated with this
 * release.
 * @member {array} [destinations] A list of distribution groups or stores.
 * @member {boolean} [isUdidProvisioned] In calls that allow passing `udid` in
 * the query string, this value will hold the provisioning status of that UDID
 * in this release. Will be ignored for non-iOS platforms.
 */
export interface ReleaseDetailsResponse {
  id?: number;
  appName?: string;
  appDisplayName?: string;
  version?: string;
  shortVersion?: string;
  releaseNotes?: string;
  provisioningProfileName?: string;
  provisioningProfileType?: string;
  isProvisioningProfileSyncing?: boolean;
  size?: number;
  minOs?: string;
  deviceFamily?: string;
  androidMinApiLevel?: string;
  bundleIdentifier?: string;
  fingerprint?: string;
  uploadedAt?: string;
  downloadUrl?: string;
  appIconUrl?: string;
  installUrl?: string;
  destinationType?: string;
  distributionGroups?: DistributionGroupWithoutIsLatest[];
  distributionStores?: DistributionStoreWithoutIsLatest[];
  destinations?: Destination[];
  isUdidProvisioned?: boolean;
}

/**
 * @class
 * Initializes a new instance of the ReleasePublishErrorResponse class.
 * @constructor
 * ReleasePublishErrorResponse
 *
 * @member {string} [message] error Details
 */
export interface ReleasePublishErrorResponse {
  message?: string;
}

/**
 * @class
 * Initializes a new instance of the ReleaseUpdateRequest class.
 * @constructor
 * A request containing information for updating a release.
 *
 * @member {string} [distributionGroupName] OBSOLETE. Will be removed in future
 * releases - use destinations instead. Name of a distribution group. The
 * release will be associated with this distribution group. If the distribution
 * group doesn't exist a 400 is returned. If both distribution group name and
 * id are passed, the id is taking precedence.
 * @member {string} [distributionGroupId] OBSOLETE. Will be removed in future
 * releases - use destinations instead. Id of a distribution group. The release
 * will be associated with this distribution group. If the distribution group
 * doesn't exist a 400 is returned. If both distribution group name and id are
 * passed, the id is taking precedence.
 * @member {string} [destinationName] OBSOLETE. Will be removed in future
 * releases - use destinations instead. Name of a destination. The release will
 * be associated with this destination. If the destination doesn't exist a 400
 * is returned. If both distribution group name and id are passed, the id is
 * taking precedence.
 * @member {string} [destinationId] OBSOLETE. Will be removed in future
 * releases - use destinations instead. Id of a destination. The release will
 * be associated with this destination. If the destination doesn't exist a 400
 * is returned. If both destination name and id are passed, the id is taking
 * precedence.
 * @member {string} [destinationType] Not used anymore.
 * @member {string} [releaseNotes] Release notes for this release.
 * @member {boolean} [mandatoryUpdate] A boolean which determines whether this
 * version should be a mandatory update or not.
 * @member {array} [destinations] Distribute this release under the following
 * list of destinations (store groups or distribution groups).
 */
export interface ReleaseUpdateRequest {
  distributionGroupName?: string;
  distributionGroupId?: string;
  destinationName?: string;
  destinationId?: string;
  destinationType?: string;
  releaseNotes?: string;
  mandatoryUpdate?: boolean;
  destinations?: DestinationId[];
}

/**
 * @class
 * Initializes a new instance of the ReleaseUpdateResponseDestinationsItem class.
 * @constructor
 * @member {string} [id]
 * @member {string} [name]
 */
export interface ReleaseUpdateResponseDestinationsItem {
  id?: string;
  name?: string;
}

/**
 * @class
 * Initializes a new instance of the ReleaseUpdateResponse class.
 * @constructor
 * Response for updating a release
 *
 * @member {boolean} [mandatoryUpdate]
 * @member {string} [releaseNotes]
 * @member {array} [destinations]
 */
export interface ReleaseUpdateResponse {
  mandatoryUpdate?: boolean;
  releaseNotes?: string;
  destinations?: ReleaseUpdateResponseDestinationsItem[];
}

/**
 * @class
 * Initializes a new instance of the ReleaseUploadBeginResponse class.
 * @constructor
 * A response containing information pertaining to starting a release upload
 * process
 *
 * @member {string} uploadId The ID for the current upload
 * @member {string} uploadUrl The URL where the client needs to upload the
 * release to
 */
export interface ReleaseUploadBeginResponse {
  uploadId: string;
  uploadUrl: string;
}

/**
 * @class
 * Initializes a new instance of the ReleaseUploadEndRequest class.
 * @constructor
 * A request containing information pertaining to complete a release upload
 * process
 *
 * @member {string} status The desired operation for the upload. Possible
 * values include: 'committed', 'aborted'
 */
export interface ReleaseUploadEndRequest {
  status: string;
}

/**
 * @class
 * Initializes a new instance of the ReleaseUploadEndResponse class.
 * @constructor
 * A response containing information about the uploaded release.
 *
 * @member {number} [releaseId] The ID of the release.
 * @member {string} [releaseUrl] A URL to the new release. If upload was
 * aborted will be null.
 */
export interface ReleaseUploadEndResponse {
  releaseId?: number;
  releaseUrl?: string;
}

/**
 * @class
 * Initializes a new instance of the ResignStatus class.
 * @constructor
 * The status of the resign operation.
 *
 * @member {string} status The status of the resign
 * @member {string} [errorCode] Error code for any error that occured during
 * the resigning operation.
 * @member {string} [errorMessage] Error message for any error that occured
 * during the resigning operation.
 */
export interface ResignStatus {
  status: string;
  errorCode?: string;
  errorMessage?: string;
}

/**
 * @class
 * Initializes a new instance of the StoresBasicDetails class.
 * @constructor
 * @member {string} [id] ID identifying a unique distribution store.
 * @member {string} [name] A name identifying a unique distribution store.
 * @member {string} [type] type of the distribution store currently stores type
 * can be intune or googleplay. Possible values include: 'intune',
 * 'googleplay', 'windows'
 * @member {string} [publishingStatus] publishing status of the release in the
 * store.
 */
export interface StoresBasicDetails {
  id?: string;
  name?: string;
  type?: string;
  publishingStatus?: string;
}

/**
 * @class
 * Initializes a new instance of the StoresDetails class.
 * @constructor
 * @member {string} [id] ID identifying a unique distribution store.
 * @member {string} [name] A name identifying a unique distribution store.
 * @member {string} [type] A type identifying the type of distribution store.
 * Possible values include: 'googleplay', 'intune', 'windows', 'apple'
 * @member {string} [publishingStatus] A status identifying the status of
 * release in the distribution store.
 * @member {boolean} [isLatest] Is the containing release the latest one in
 * this distribution store.
 */
export interface StoresDetails {
  id?: string;
  name?: string;
  type?: string;
  publishingStatus?: string;
  isLatest?: boolean;
}

/**
 * @class
 * Initializes a new instance of the StoresBasicReleaseDetails class.
 * @constructor
 * Basic information on a release
 *
 * @member {number} [id] ID identifying this unique release.
 * @member {string} [version] The release's version.
 * For iOS: CFBundleVersion from info.plist.
 * For Android: android:versionCode from AppManifest.xml.
 * @member {string} [shortVersion] The release's short version.
 * For iOS: CFBundleShortVersionString from info.plist.
 * For Android: android:versionName from AppManifest.xml.
 * @member {string} [uploadedAt] UTC time in ISO 8601 format of the uploaded
 * time.
 * @member {array} [distributionStores] a list of distribution stores that are
 * associated with this release.
 */
export interface StoresBasicReleaseDetails {
  id?: number;
  version?: string;
  shortVersion?: string;
  uploadedAt?: string;
  distributionStores?: StoresDetails[];
}

/**
 * @class
 * Initializes a new instance of the StoresReleaseDetails class.
 * @constructor
 * Details of an uploaded release
 *
 * @member {number} [id] ID identifying this unique release.
 * @member {string} [status] OBSOLETE. Will be removed in next version. The
 * availability concept is now replaced with distributed. Any 'available'
 * release will be associated with the default distribution group of an
 * app.</br>
 * The release state.<br>
 * <b>available</b>: The uploaded release has been distributed.<br>
 * <b>unavailable</b>: The uploaded release is not visible to the user. <br>
 * . Possible values include: 'available', 'unavailable'
 * @member {string} [appName] The app's name (extracted from the uploaded
 * release).
 * @member {string} [appDisplayName] The app's display name.
 * @member {string} [version] The release's version.<br>
 * For iOS: CFBundleVersion from info.plist.
 * For Android: android:versionCode from AppManifest.xml.
 * @member {string} [shortVersion] The release's short version.<br>
 * For iOS: CFBundleShortVersionString from info.plist.
 * For Android: android:versionName from AppManifest.xml.
 * @member {string} [releaseNotes] The release's release notes.
 * @member {number} [size] The release's size in bytes.
 * @member {string} [minOs] The release's minimum required operating system.
 * @member {string} [androidMinApiLevel] The release's minimum required Android
 * API level.
 * @member {string} [bundleIdentifier] The identifier of the apps bundle.
 * @member {string} [fingerprint] MD5 checksum of the release binary.
 * @member {string} [uploadedAt] UTC time in ISO 8601 format of the uploaded
 * time.
 * @member {string} [downloadUrl] The URL that hosts the binary for this
 * release.
 * @member {string} [installUrl] The href required to install a release on a
 * mobile device. On iOS devices will be prefixed with
 * `itms-services://?action=download-manifest&url=`. Possible values include:
 * 'group', 'store'
 * @member {object} [distributionStores] a list of distribution stores that are
 * associated with this release.
 */
export interface StoresReleaseDetails {
  id?: number;
  status?: string;
  appName?: string;
  appDisplayName?: string;
  version?: string;
  shortVersion?: string;
  releaseNotes?: string;
  size?: number;
  minOs?: string;
  androidMinApiLevel?: string;
  bundleIdentifier?: string;
  fingerprint?: string;
  uploadedAt?: string;
  downloadUrl?: string;
  installUrl?: string;
  distributionStores?: any;
}

/**
 * @class
 * Initializes a new instance of the TesterAppRelease class.
 * @constructor
 * @member {number} [size] The release's size in bytes.
 * @member {string} [installUrl] The href required to install a release on a
 * mobile device. On iOS devices will be prefixed with
 * `itms-services://?action=download-manifest&url=`
 * @member {string} [releaseNotes] The release's release notes.
 */
export interface TesterAppRelease extends DistributionGroupRelease {
  size?: number;
  installUrl?: string;
  releaseNotes?: string;
}

/**
 * @class
 * Initializes a new instance of the TesterAppWithReleaseResponseOwner class.
 * @constructor
 * The information about the app's owner
 *
 * @member {string} [id] The unique id (UUID) of the owner
 * @member {string} [avatarUrl] The avatar URL of the owner
 * @member {string} [displayName] The owner's display name
 * @member {string} [email] The owner's email address
 * @member {string} [name] The unique name that used to identify the owner
 * @member {string} [type] The owner type. Can either be 'org' or 'user'.
 * Possible values include: 'org', 'user'
 */
export interface TesterAppWithReleaseResponseOwner {
  id?: string;
  avatarUrl?: string;
  displayName?: string;
  email?: string;
  name?: string;
  type?: string;
}

/**
 * @class
 * Initializes a new instance of the TesterAppWithReleaseResponse class.
 * @constructor
 * @member {string} [id] The unique ID (UUID) of the app
 * @member {object} [release]
 * @member {number} [release.size] The release's size in bytes.
 * @member {string} [release.installUrl] The href required to install a release
 * on a mobile device. On iOS devices will be prefixed with
 * `itms-services://?action=download-manifest&url=`
 * @member {string} [release.releaseNotes] The release's release notes.
 * @member {string} [name] The app's name.
 * @member {string} [displayName] The app's display name.
 * @member {string} [description] The description of the app
 * @member {string} [iconUrl] A URL to the app's icon.
 * @member {string} [os] The app's os.
 * @member {object} [owner] The information about the app's owner
 * @member {string} [owner.id] The unique id (UUID) of the owner
 * @member {string} [owner.avatarUrl] The avatar URL of the owner
 * @member {string} [owner.displayName] The owner's display name
 * @member {string} [owner.email] The owner's email address
 * @member {string} [owner.name] The unique name that used to identify the
 * owner
 * @member {string} [owner.type] The owner type. Can either be 'org' or 'user'.
 * Possible values include: 'org', 'user'
 */
export interface TesterAppWithReleaseResponse {
  id?: string;
  release?: TesterAppRelease;
  name?: string;
  displayName?: string;
  description?: string;
  iconUrl?: string;
  os?: string;
  owner?: TesterAppWithReleaseResponseOwner;
}
