<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="file:/var/app/InputFileSchema.xsd">
    <changeset
     id="SR-298_styrism_tiktok_track_rules:1"
     author="nlittmann"
     run-always="true"
     topic="event.orchardSoundRecording.fingerprintRules">
        <precondition>
            <sqlquery>
                <![CDATA[
                    WITH track_rules AS (
                        WITH results AS (
                            WITH service_ids_to_names AS (
                                SELECT
                                    *
                                FROM
                                VALUES
                                    (1294, 'tiktok') AS services (service_id, service_name)
                            ),
                            release_level_dms_country_carveouts AS (
                                SELECT
                                    rr.RELEASE_ID AS release_id,
                                    cm.CUSTOMER_MASTER_MASTER_ID AS service_id,
                                    LISTAGG(DISTINCT(cou.COUNTRY_CODE), ',') WITHIN GROUP (
                                        ORDER BY
                                            cou.COUNTRY_CODE
                                    ) AS territory_carveouts
                                FROM
                                    ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.RELEASE_DMS_RESTRICTION AS rr
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.CUSTOMER_MASTER AS cm ON cm.CUSTOMER_ID = rr.DMS_CUSTOMER_ID
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.COUNTRY AS cou ON cou.ID = cm.TERRITORY
                                WHERE
                                    cm.CUSTOMER_MASTER_MASTER_ID IN (
                                        SELECT
                                            service_id
                                        FROM
                                            service_ids_to_names
                                    )
                                GROUP BY
                                    1,
                                    2
                            ),
                            release_level_dms_star_carveouts AS (
                                SELECT
                                    rmr.RELEASE_ID AS release_id,
                                    rmr.CUSTOMER_MASTER_MASTER_ID AS service_id,
                                    TRUE AS star_carveout
                                FROM
                                    ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.RELEASE_DMS_MASTER_RESTRICTION AS rmr
                                WHERE
                                    rmr.CUSTOMER_MASTER_MASTER_ID IN (
                                        SELECT
                                            service_id
                                        FROM
                                            service_ids_to_names
                                    )
                                    AND rmr.DISTRIBUTION_TYPE_ID = 1
                                GROUP BY
                                    1,
                                    2
                            ),
                            registry_locked_territories AS (
                                SELECT
                                    isrc,
                                    LISTAGG(DISTINCT(reg_lock.territory), ',') WITHIN GROUP (
                                        ORDER BY
                                            reg_lock.territory
                                    ) AS territory_carveouts
                                FROM
                                    facts.prod.registry_locked AS reg_lock
                                GROUP BY
                                    1
                            ),
                            filtered_track_ids AS (
                                SELECT
                                    DISTINCT (tr.ID) AS id
                                FROM
                                    ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR AS v
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.PROJECT AS pj ON pj.vendor_id = v.vendor_id
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.RELEASES AS r ON r.project_id = pj.project_id
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.TRACK AS tr ON tr.release_id = r.release_id
                                WHERE
                                    v.VENDOR_ID IN (35846)
                            )
                            SELECT
                                sitn.service_name,
                                tr.ID,
                                COALESCE(
                                    release_level_dms_country_carveouts.territory_carveouts,
                                    ''
                                ) || IFF (
                                    release_level_dms_country_carveouts.territory_carveouts IS NOT NULL,
                                    ',',
                                    ''
                                ) || COALESCE(
                                    reg_lock.territory_carveouts,
                                    ''
                                ) AS territory_carveouts,
                                release_level_dms_star_carveouts.star_carveout = TRUE AS star_carveout,
                                LISTAGG(DISTINCT(hr1.TERRITORY), ',') WITHIN GROUP (
                                    ORDER BY
                                        hr1.TERRITORY
                                ) AS territory_rules,
                                COUNT(hr2.*) >= 1 AS star_rule
                            FROM
                                ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.RELEASES AS r FULL
                                OUTER JOIN service_ids_to_names AS sitn
                                LEFT JOIN release_level_dms_country_carveouts ON release_level_dms_country_carveouts.release_id = r.RELEASE_ID
                                AND release_level_dms_country_carveouts.service_id = sitn.service_id
                                LEFT JOIN release_level_dms_star_carveouts ON release_level_dms_star_carveouts.release_id = r.RELEASE_ID
                                AND release_level_dms_star_carveouts.service_id = sitn.service_id
                                JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.TRACK AS tr ON tr.RELEASE_ID = r.RELEASE_ID
                                LEFT JOIN registry_locked_territories AS reg_lock ON reg_lock.isrc = tr.isrc
                                LEFT JOIN facts.prod.HAS_FINGERPRINT_RULE AS hr1 ON TRY_TO_NUMBER(hr1.ORCHARD_OBJ_ID) = tr.id
                                AND hr1.ORCHARD_OBJ_TYPE = 'Track'
                                AND hr1.SERVICE = sitn.service_name
                                AND hr1."POLICY" = 'carveout'
                                AND hr1.TERRITORY != '*'
                                LEFT JOIN facts.prod.HAS_FINGERPRINT_RULE AS hr2 ON TRY_TO_NUMBER(hr2.ORCHARD_OBJ_ID) = tr.ID
                                AND hr2.ORCHARD_OBJ_TYPE = 'Track'
                                AND hr2.SERVICE = sitn.service_name
                                AND hr2."POLICY" = 'carveout'
                                AND hr2.TERRITORY = '*'
                            WHERE
                                tr.ID in (
                                    SELECT
                                        ID
                                    from
                                        filtered_track_ids
                                )
                            GROUP BY
                                1,
                                2,
                                3,
                                4
                        )
                        SELECT
                            *
                        FROM
                            results
                        WHERE
                            (
                                results.star_carveout = TRUE
                                AND results.star_rule = FALSE
                            )
                            OR (
                                results.star_carveout = FALSE
                                AND results.territory_carveouts != results.territory_rules
                            )
                    ),
                    star_rules_derived_from_missing_registry_entries AS (
                        WITH all_registry_territories AS (
                            SELECT
                                DISTINCT(territory) AS territory
                            FROM
                                facts.prod.registry
                        ),
                        not_in_registry AS (
                            WITH service_ids_to_names AS (
                                SELECT
                                    *
                                FROM
                                VALUES
                                    (1294, 'tiktok') AS services (service_id, service_name)
                            ),
                            tuids AS (
                                SELECT
                                    DISTINCT(tuid) AS tuid
                                FROM
                                    facts.prod.registry AS reg
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.TRACK AS tr ON reg.tuid = tr.id
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.RELEASES AS r ON tr.release_id = r.release_id
                                    AND r.deletions = 'N'
                            ),
                            filtered_tuids AS (
                                SELECT
                                    DISTINCT (reg.tuid) AS tuid
                                FROM
                                    ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR AS v
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.PROJECT AS pj ON pj.vendor_id = v.vendor_id
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.RELEASES AS r ON r.project_id = pj.project_id
                                    JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.TRACK AS tr ON tr.release_id = r.release_id
                                    JOIN facts.prod.registry AS reg ON reg.tuid = tr.id
                                WHERE
                                    v.VENDOR_ID IN (35846)
                            )
                            SELECT
                                sitn.service_name,
                                tuids.tuid,
                                all_registry_territories.territory,
                                reg.TUID IS NOT NULL AS in_registry,
                                hr1.territory IS NOT NULL AS carveout_territory_rule_exists,
                                hr2.territory IS NOT NULL AS carveout_star_rule_exists
                            FROM
                                tuids FULL
                                OUTER JOIN service_ids_to_names AS sitn
                                JOIN all_registry_territories
                                LEFT JOIN facts.prod.registry AS reg ON reg.tuid = tuids.tuid
                                AND reg.territory = all_registry_territories.territory
                                LEFT JOIN facts.prod.HAS_FINGERPRINT_RULE AS hr1 ON TRY_TO_NUMBER(hr1.ORCHARD_OBJ_ID) = tuids.tuid
                                AND hr1.ORCHARD_OBJ_TYPE = 'Track'
                                AND hr1.SERVICE = sitn.service_name
                                AND hr1."POLICY" = 'carveout'
                                AND hr1.TERRITORY = all_registry_territories.territory
                                LEFT JOIN facts.prod.HAS_FINGERPRINT_RULE AS hr2 ON TRY_TO_NUMBER(hr2.ORCHARD_OBJ_ID) = tuids.tuid
                                AND hr2.ORCHARD_OBJ_TYPE = 'Track'
                                AND hr2.SERVICE = sitn.service_name
                                AND hr2."POLICY" = 'carveout'
                                AND hr2.TERRITORY = '*'
                            WHERE
                                (
                                    in_registry = FALSE
                                    AND (
                                        carveout_territory_rule_exists = FALSE
                                        OR carveout_star_rule_exists = FALSE
                                    )
                                    AND tuids.tuid IN (
                                        SELECT
                                            tuid
                                        from
                                            filtered_tuids
                                    )
                                )
                            ORDER BY
                                TUID,
                                IN_REGISTRY,
                                TERRITORY
                        )
                        SELECT
                            tuid,
                            service_name,
                            COUNT(*) = (
                                SELECT
                                    COUNT(*)
                                FROM
                                    all_registry_territories
                            ) AS no_territories_in_registry,
                            LISTAGG(DISTINCT(territory), ',') WITHIN GROUP (
                                ORDER BY
                                    territory
                            ) AS territories_not_in_registry
                        FROM
                            not_in_registry
                        GROUP BY
                            1,
                            2
                    )
                    SELECT
                        CONCAT('tuid:', id) AS KEY,
                        ARRAY_AGG(
                            OBJECT_CONSTRUCT(
                                'territory_carveouts',
                                TERRITORY_CARVEOUTS,
                                'star_carveout',
                                STAR_CARVEOUT,
                                'territory_rules',
                                TERRITORY_RULES,
                                'star_rule',
                                STAR_RULE,
                                'service',
                                service_name
                            )
                        ) WITHIN GROUP (
                            ORDER BY
                                service_name
                        ) AS VALUE
                    FROM
                        track_rules
                    GROUP BY
                        1
                    UNION ALL
                    SELECT
                        CONCAT('tuid:', tuid) AS KEY,
                        ARRAY_AGG(
                            OBJECT_CONSTRUCT(
                                'territory_carveouts',
                                IFF(no_territories_in_registry, '', territories_not_in_registry),
                                'star_carveout',
                                no_territories_in_registry,
                                'territory_rules',
                                '',
                                'star_rule',
                                FALSE,
                                'service',
                                service_name
                            )
                        ) WITHIN GROUP (
                            ORDER BY
                                service_name
                        ) AS VALUE
                    FROM
                        star_rules_derived_from_missing_registry_entries
                    GROUP BY
                        1
                    ORDER BY
                        1
                ]]>
            </sqlquery>
        </precondition>
    </changeset>
</changelog>
