enum NrDeliveryOrdersOrderBy {
    CREATED_AT
    ID
    LAST_UPDATED
}

enum NrDeliveryOrderStatus {
    ERROR
    PROCESSING_JOBS
    QUEUED
    STARTED
    SUCCESS
}

type NrDeliveryOrder {
    cmo: DeliveryStore!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    createdAt: DateTime
        @ppCanPerform(resource: "contribution", action: "view:nr")
    createdBy: Identity!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    id: ID!
    lastUpdated: DateTime
        @ppCanPerform(resource: "contribution", action: "view:nr")
    numberOfClaims(status: NrDeliveryClaimStatus): Int!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    numberOfJobs: Int!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    outputFile: String
        @ppCanPerform(resource: "contribution", action: "view:nr")
    reDeliver: Boolean!
        @ppCanPerform(resource: "contribution", action: "view:nr")
    status: NrDeliveryOrderStatus
        @ppCanPerform(resource: "contribution", action: "view:nr")
    stepFnMessage: String!
        @ppCanPerform(resource: "contribution", action: "view:nr")
}

type NrDeliveryOrdersResult {
    items: [NrDeliveryOrder!]!
    totalCount: Int!
}

input NrDeliveryOrderInput {
    cmoId: ID!
    nrContributorUuids: [ID!]
    reDeliver: Boolean!
}

input UpdateNrDeliveryOrderInput {
    orderId: ID!
    s3OutputPath: String
    status: NrDeliveryOrderStatus!
}

input NrDeliveryOrdersFilterInput {
    cmoId: ID = null
    orderId: ID = null
    reDeliver: Int = null
    status: NrDeliveryOrderStatus = null
}

extend type Query {
    nrDeliveryOrderById(id: ID!): NrDeliveryOrder

    nrDeliveryOrders(
        filters: NrDeliveryOrdersFilterInput
        limit: Int = 20
        offset: Int = 0
        orderBy: NrDeliveryOrdersOrderBy = LAST_UPDATED
        orderDir: OrderDir = DESC
    ): NrDeliveryOrdersResult!

    nrDeliveryOrdersByContributionId(
        id: ID!
        jobStatus: NrDeliveryJobStatus! = COMPLETE
        limit: Int
        offset: Int = 0
        orderBy: NrDeliveryJobsOrderBy = LAST_UPDATED
        orderDir: OrderDir = DESC
    ): NrDeliveryOrdersResult!
        @ppCanPerform(resource: "contribution", action: "view:nr")
}

extend type Mutation {
    createNrDeliveryOrder(input: NrDeliveryOrderInput!): NrDeliveryOrder!

    updateNrDeliveryOrderStatus(
        input: UpdateNrDeliveryOrderInput!
    ): NrDeliveryOrder!
}
