<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <changeset id="DS-5539_backfill_released_content:1" author="ssavva" run-always="true">
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    "
                        MATCH (p:Product:Orchard)
                        USING INDEX p:Product(saleStartDate)
                        USING INDEX p:Product(preorderDate)
                        WHERE
                            date() - duration({days: 30}) < p.saleStartDate <= date()
                            OR
                            date() - duration({days: 30}) < p.preorderDate <= date()
                        MATCH (lsr:LabelSoundRecording)<-[:IS_PLACEMENT_OF]-(t:Track:Orchard)<-[:INCLUDES]-(p)<-[:INCLUDES]-(pr:Project)-[:BELONGS_TO]->(Vendor)<-[:HAS_LABEL]-(cp:CompanyBrand)
                        WHERE
                            NOT (lsr)<-[:REPRESENTS]-(:GlobalSoundRecording)
                            AND COALESCE(lsr.name, '') <> ''
                            AND lsr.isrc =~ '^[A-Za-z]{2}[-]?[0-9A-Za-z]{3}[-]?[0-9]{2}[-]?[0-9]{5}$'
                            AND p.deletions = false
                            AND (p.releaseStatus = 'in_content' OR cp.name = 'awal')
                            AND p.notForDistribution in ['N', 'SMEAnalyticsDummy', 'SwitchboardDummy']
                        WITH
                            lsr,
                            COLLECT(DISTINCT t.type) AS trackTypes,
                            COLLECT(DISTINCT p.releaseDate) AS releaseDates
                        RETURN lsr, trackTypes, HEAD(apoc.coll.sort(releaseDates)) AS releaseDate
                    ",
                    "
                        MERGE (n:GlobalSoundRecording {isrc: toUpper(lsr.isrc)})
                            ON CREATE SET
                                n.id = apoc.create.uuid(),
                                n.createdAt = datetime(),
                                n.createdBy = 'database/DS-5539',
                                n.name = CASE WHEN COALESCE(lsr.version, '') = '' THEN lsr.name ELSE lsr.name + ' - ' + lsr.version END,
                                n.types = trackTypes,
                                n.releaseDate = releaseDate
                            ON MATCH SET
                                n.name = CASE WHEN COALESCE(lsr.version, '') = '' THEN lsr.name ELSE lsr.name + ' - ' + lsr.version END,
                                n.lastModifiedAt = datetime(),
                                n.lastModifiedBy = 'database/DS-5539',
                                n.types = apoc.coll.sort(apoc.coll.union(n.types, trackTypes))
                        MERGE (n)-[r:REPRESENTS]->(lsr)
                            ON CREATE SET
                                r.createdAt = datetime(),
                                r.createdBy = 'database/DS-5539'
                            ON MATCH SET
                                r.lastModifiedAt = datetime(),
                                r.lastModifiedBy = 'database/DS-5539'
                        WITH
                            lsr, n
                        MATCH (pc:PublishingComposition)-[h:HAS_SOUND_RECORDING]->(lsr)
                            WITH DISTINCT pc, h, lsr, n
                            CREATE (pc)-[has:HAS_SOUND_RECORDING]->(n)
                            SET
                                has.createdAt = datetime(),
                                has.lastModifiedAt = datetime(),
                                has.createdBy = 'database/DS-5539'
                            CREATE (pc)-[dhas:DELETED_HAS_SOUND_RECORDING]->(lsr)
                            SET
                                dhas.deletedAt = datetime(),
                                has.deletedBy = 'database/DS-5539'
                            DELETE h
                    ",
                    {batchSize:1000, iterateList:true, parallel:false}
                )
                YIELD total, errorMessages
                RETURN total, errorMessages;
            ]]>
        </cypherquery>
    </changeset>
</changelog>
