input CreateProductInput {
    accountId: Int
    accountType: String
    channelSelection: String
    cLine: String
    deliveredVersion: String
    description: String
    format: String
    genreId: Int
    metaLanguage: String
    pLine: String
    """
    Prefer to use `participations` instead of this field.
    """
    primaryArtists: [CreateArtistInput]
    participations: [ProductParticipationInput!]
    productCode: String
    productHighlights: String!
    productName: String!
    productConfiguration: ProductConfiguration
    projectId: Int!
    specialInstructions: String
    subaccountId: Int
    subgenreId: Int
    upc: String
    displayUpc: String
    version: String
    imprint: String
    notForDistribution: String
    productLocalizations: [SetProductLocalizationInput!]
    manufacturerUpc: String
    vendorReleaseIdentifier: String
}

input UpdateProductInput {
    accountId: Int
    accountType: String
    artistId: Int
    channelSelection: String
    cLine: String
    deliveredVersion: String
    description: String
    format: String
    genreId: Int
    imprint: String
    manufacturerUpc: String
    metaLanguage: String
    notForDistribution: String
    pLine: String
    preorderDate: String
    previewable: String
    """
    Prefer to use `participations` instead of this field.
    """
    primaryArtists: [CreateArtistInput]
    participations: [ProductParticipationInput!]
    productCode: String
    productHighlights: String
    productId: Int!
    productName: String
    projectCode: String
    productConfiguration: ProductConfiguration
    projectId: String
    releaseDate: String
    saleStartDate: String
    specialInstructions: String
    subgenreId: Int
    vendorReleaseIdentifier: String
    version: String
    productLocalizations: [SetProductLocalizationInput!]
}

input DeleteProductInput {
    productId: Int!
}

input CreateVideoSingleProductInput {
    accountId: Int
    associatedTrackId: Int
    channelSelection: String
    clineYear: Int
    clineCopyrightHolder: String
    description: String
    genreId: Int
    imprint: String
    isrc: String
    languageOfVideoContent: String
    languageOfVideoTitle: String
    lyrics: String
    primaryArtists: [CreateArtistInput]
    productCode: String
    projectId: String!
    subaccountId: Int
    parentalAdvisory: String
    plineYear: Int
    plineCopyrightHolder: String
    specialInstructions: String
    subgenreId: Int
    typeOfVideo: String
    upc: String
    version: String
    videoTitle: String
    notForDistribution: String
    releaseDate: String
    originalReleaseDate: String
    newRelease: Boolean
    thumbnailPath: String
    keywords: [String!]
    vendorReleaseIdentifier: String
    vendorCatalogNumber: String
}

input UpdateVideoSingleProductInput {
    accountId: Int
    associatedTrackId: Int
    channelSelection: String
    clineYear: Int
    clineCopyrightHolder: String
    description: String
    genreId: Int
    imprint: String
    isrc: String
    languageOfVideoContent: String
    languageOfVideoTitle: String
    lyrics: String
    primaryArtists: [CreateArtistInput]
    productCode: String
    productId: String!
    parentalAdvisory: String
    plineYear: Int
    plineCopyrightHolder: String
    specialInstructions: String
    subaccountId: Int
    subgenreId: Int
    typeOfVideo: String
    version: String
    videoTitle: String
    notForDistribution: String
    releaseDate: String
    originalReleaseDate: String
    latestPipelineRunId: Int
    customThumbnailPath: String
    newRelease: Boolean
    thumbnailPath: String
    keywords: [String!]
    vendorCatalogNumber: String
    vendorReleaseIdentifier: String
    manufacturerUpc: String
}

input SaveVideoSingleProductInput {
    create: CreateVideoSingleProductInput
    update: UpdateVideoSingleProductInput
}

input ApproveVideoSingleProductInput {
    productId: Int!
    approvalType: VideoSingleProductApprovalType!
    rejectionReason: String
    bypassValidation: Boolean
}

input SubmitProductInput {
    productId: ID!
    vendorId: ID
    subaccountId: ID
}

input UnsubmitProductInput {
    productId: ID!
}

type UnsubmitProductResult {
    result: String!
}

input CreateProductCorrectionInput {
    productId: ID!
}

type CreateProductCorrectionResult {
    releaseCorrectionId: Int
    releaseId: Int
    status: String
}

input DeleteProductCorrectionInput {
    productId: ID!
    releaseCorrectionId: ID!
}

type DeleteProductCorrectionResult {
    message: String
}

input ProductCorrectionDetailInput {
    productId: Int!
    releaseCorrectionId: Int!
    corrections: [CorrectionDetailInput!]!
}

input CorrectionDetailInput {
    keyId: Int
    keyValue: String!
    tableName: String!
    fieldName: String!
}

input UpdateProductPricingTier {
    productId: ID!
    orchardPricingTier: ID!
    pricingFamily: PricingFamily!
    trackOverrides: [SetTrackPricingTier!]
}

input ProductTerritoryDatesInput {
    productId: Int!
    territoryDates: [ProductTerritoryDateInput!]
}

input ProductTerritoryDateInput {
    countryCodes: [String!]!
    releaseDate: String
    saleStartDate: String
    vodStartDate: String
    preorderDate: String
}

input ApproveProductInput {
    productId: Int!
}

input UpdateProductTimedRelease {
    productId: Int!
    timeOfDayProduct: String!
    timeZone: String!
    storeIds: [Int!]!
}

input CreateProductTimedRelease {
    productId: Int!
    timeOfDayProduct: String!
    timeZone: String!
    storeIds: [Int!]!
}

input DeleteProductTimedRelease {
    productId: Int!
}

input SetProductLocalizationInput {
    languageId: Int!,
    productName: String!,
    deliveredVersion: String
}

input ProductParticipationInput {
    labelParticipantUuid: ID!
    role: ProductArtistRole!
    """This field requires product level localizations to be set"""
    localizations: [ParticipationLocalization!]
}
