interface SoundRecordingNr {
    countriesOfRecording: [Territory!]
    duration: Int
    featuredArtists: [ParticipantNr]
    firstReleaseYear: Int
    id: ID!
    isrc: String
    primaryArtists: [ParticipantNr]!
    recordingTitle: String!
    version: String
}

type NrSoundRecording implements SoundRecordingNr @key(fields: "id") {
    albumName: String @ppCanPerform(resource: "contribution", action: "view:nr")
    catalogNumber: String
        @ppCanPerform(resource: "contribution", action: "view:nr")
    contributions: [NrContribution!]!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    countriesOfRecording: [Territory!]
        @ppCanPerform(resource: "contribution", action: "view:nr")
    countryOfLabel: Territory
        @ppCanPerform(resource: "contribution", action: "view:nr")
    countryOfMaster: Territory
        @ppCanPerform(resource: "contribution", action: "view:nr")
    duration: Int @ppCanPerform(resource: "contribution", action: "view:nr")
    externalId: String
        @ppCanPerform(resource: "contribution", action: "view:nr")
    featuredArtists: [NrParticipant]!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    firstReleaseYear: Int
        @ppCanPerform(resource: "contribution", action: "view:nr")
    id: ID!
    isrc: String @ppCanPerform(resource: "contribution", action: "view:basic")
    mainArtist: String!
        @ppCanPerform(resource: "contribution", action: "view:basic")
    originalLabel: String
        @ppCanPerform(resource: "contribution", action: "view:nr")
    primaryArtists: [NrParticipant]!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    priority: Priority!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    recordingTitle: String!
        @ppCanPerform(resource: "contribution", action: "view:basic")
    recordingType: String!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    recordingYear: Int
        @ppCanPerform(resource: "contribution", action: "view:nr")
    totalFeaturedPerformers: Int
        @ppCanPerform(resource: "contribution", action: "view:nr")
    version: String @ppCanPerform(resource: "contribution", action: "view:nr")
}

input CreateNrSoundRecordingInput {
    albumName: String = null
    catalogNumber: String = null
    countriesOfRecording: [String!] = null
    countryOfLabel: String = null
    countryOfMaster: String = null
    duration: Int = null
    featuredArtistIds: [ID!]!
    firstReleaseYear: Int = null
    isrc: String = null
    mainArtist: String!
    originalLabel: String = null
    primaryArtistIds: [ID!]!
    priority: Priority!
    recordingTitle: String!
    recordingType: String!
    recordingYear: Int = null
    totalFeaturedPerformers: Int = null
    version: String = null
}

input UpdateNrSoundRecordingInput {
    albumName: String
    catalogNumber: String
    countriesOfRecording: [String]
    countryOfLabel: String
    countryOfMaster: String
    duration: Int
    featuredArtistIds: [ID!]!
    firstReleaseYear: Int
    isrc: String
    mainArtist: String!
    originalLabel: String
    primaryArtistIds: [ID!]!
    priority: Priority!
    recordingTitle: String!
    recordingType: String!
    recordingYear: Int
    totalFeaturedPerformers: Int
    version: String
}

extend type Query {
    nrSoundRecordingById(id: ID!): NrSoundRecording
        @ppCanPerform(resource: "contribution", action: "view:nr")

    nrSoundRecordingPartialSearch(
        isrc: String = null
        mainArtist: String = null
        recordingTitle: String = null
        recordingVersion: String = null
        limit: Int = 50
        offset: Int = 0
    ): [NrSoundRecording!]
        @ppCanPerform(resource: "contribution", action: "view:nr")
}

extend type Mutation {
    createNrSoundRecording(
        input: CreateNrSoundRecordingInput!
    ): NrSoundRecording!

    updateNrSoundRecording(
        id: ID!
        input: UpdateNrSoundRecordingInput!
    ): NrSoundRecording! @ppCanPerform(resource: "contribution", action: "edit")
}
