MATCH (gsr: GlobalSoundRecording {isrc: "QM7282022872"})

// private data
OPTIONAL MATCH (p: Product:Orchard {deletions: false})-[:INCLUDES]->(:Track:Orchard)-[:IS_PLACEMENT_OF]->(lsr:LabelSoundRecording)<-[:REPRESENTS]-(gsr)

OPTIONAL MATCH (v: Vendor {id: lsr.vendorId})
OPTIONAL MATCH (sa: Subaccount {id: lsr.subaccountId})
OPTIONAL MATCH (gp: GlobalParticipant)-[:REPRESENTS]->(lp: LabelParticipant)-[lpr :PARTICIPATED_IN]->(:Track)-[:IS_PLACEMENT_OF]->(lsr)
OPTIONAL MATCH (gp)-[:REPRESENTS]->(pp:PublicParticipant)-[:HAS_AGGREGATED_PARTICIPANT_SOCIAL_STAT]->(ss: AggregatedParticipantSocialStat)
// public data
OPTIONAL MATCH (psr: PublicSoundRecording)<-[:REPRESENTS]-(gsr)
OPTIONAL MATCH (pgp: GlobalParticipant)-[:REPRESENTS]->(ppp: PublicParticipant)-[:PARTICIPATED_IN]->(psr)
OPTIONAL MATCH (ppp)-[:HAS_AGGREGATED_PARTICIPANT_SOCIAL_STAT]->(pss: AggregatedParticipantSocialStat)

WITH COLLECT(DISTINCT lpr.participated_as) as roles, gp, lp, lsr, gsr, pp, sa, v, ss, ppp, pgp, pss
RETURN gsr {
   .id,
   .isrc,
   .name,
   .releaseDate,
   .imageUrl,
   .popularity,
   .imprint,
   .types,
   hasPublicData: ppp IS NOT NULL OR ANY( x IN COLLECT( DISTINCT pp ) WHERE x IS NOT NULL ),
   labelSoundRecordings: COLLECT( DISTINCT lsr {
       .id,
       .name,
       .vendorId,
       .subaccountId,
       subaccountName: sa.name,
       vendorName: v.name
   }),
   publicParticipant: ppp {
       .id,
       globalParticipant: pgp {
           .id,
           .name,
           .imageUrl,
           .countryCode
           stats: pss {
               .followers, 
               .monthlyListeners, 
               .views, 
               .popularity
           }
       }
   },
   labelParticipants: COLLECT( DISTINCT lp {
       .id,
       .uuid,
       .vendorId,
       .subaccountId,
       .name,
       .imageUrl,
       roles: roles,
       socialAccountIds: {
           spotify: lp.spotifyId,
           appleMusic: lp.appleMusicId,
           facebook: lp.facebookId
       },
       globalParticipant: gp {
           .id,
           .name,
           .imageUrl,
           .countryCode,
           stats: ss {
               .followers, 
               .monthlyListeners, 
               .views, 
               .popularity
           }
       }
   })
}
