<?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-904" author="nlittmann" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                    WITH filtered_vendor_ids AS (
                        SELECT DISTINCT(dp.labelid)::INTEGER AS vendor_id
                        FROM FACTS.PROD.DIM_TRACK_CLEAN_MV dtc
                        INNER JOIN FACTS.PROD.DIM_RELEASE dr 
                            ON dtc.upc = dr.releaseid
                        INNER JOIN FACTS.PROD.DIM_PROJECT dp 
                            ON dr.projectid = dp.projectid
                        INNER JOIN FACTS.PROD.VENDOR v
                            ON dp.labelid = v.vendor_id
                        WHERE 
                            dtc.track_unique_id IN (SELECT DISTINCT(tuid) FROM FACTS.PROD.REGISTRY)
                            AND v.status = 'signed'
                        EXCEPT (
                            SELECT DISTINCT(ORCHARD_OBJ_ID)::INTEGER AS vendor_id 
                            FROM FACTS.PROD.HAS_FINGERPRINT_RULE
                            WHERE ORCHARD_OBJ_TYPE = 'Vendor'
                            AND service = 'youtube'
                        )
                    ),
                    territories_in_registry AS (
                        SELECT DISTINCT(territory) AS TERRITORY FROM FACTS.PROD.REGISTRY
                    ),
                    vendor_to_earliest_ingestion_completed AS (
                        SELECT
                            v.vendor_id,
                            to_char(
                                MIN(r.ingestion_completed),
                                'YYYY-MM-DDTHH:MM:SS+00:00'
                            ) AS earliest_ingestion_completed
                        FROM
                            ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.vendor AS v
                            INNER JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.project AS pj ON pj.vendor_id = v.vendor_id
                            INNER JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.releases AS r ON r.project_id = pj.project_id
                        WHERE
                            r.ingestion_completed IS NOT NULL
                            AND r.release_status = 'in_content'
                            AND v.vendor_id in (SELECT vendor_id FROM filtered_vendor_ids)
                        GROUP BY
                            1
                    ),
                    contract_territory_carveouts_split AS (
                        SELECT
                            vc.VENDOR_ID AS VENDOR_ID,
                            TRY_TO_NUMBER(value) AS country_id,
                        FROM
                            ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR_CONTRACT AS vc,
                            LATERAL SPLIT_TO_TABLE(vc.TERRITORY_CARVE_OUT, ',')
                        WHERE
                            vc.vendor_id in (SELECT vendor_id FROM filtered_vendor_ids)
                            AND vc.CONT_START <= CURRENT_DATE()
                            AND (vc.CONT_END > CURRENT_DATE() OR vc.CONT_END IS NULL)
                    ),
                    contract_territory_carveouts AS (
                        SELECT 
                            ctcs.vendor_id,
                            cou.country_code,
                            'carveout' AS policy,
                            NULL as start_date
                        FROM 
                            contract_territory_carveouts_split ctcs
                        INNER JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.COUNTRY AS cou 
                            ON cou.ID = ctcs.country_id
                        INNER JOIN territories_in_registry tir 
                            ON tir.TERRITORY = cou.COUNTRY_CODE
                    ),
                    contract_dms_territory_carveouts AS (
                        WITH youtube_customer_ids AS (
                            SELECT customer_id 
                            FROM ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.CUSTOMER_MASTER 
                            WHERE customer_master_master_id = 453
                        ),
                        vendor_dms_restriction AS (
                            SELECT
                                vc.VENDOR_ID AS VENDOR_ID,
                                TRY_TO_NUMBER(value) AS DMS_ID,
                            FROM
                                ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR_CONTRACT AS vc,
                                LATERAL SPLIT_TO_TABLE(vc.DMS_CARVE_OUT, ',')
                            WHERE
                                DMS_ID IN (SELECT * FROM youtube_customer_ids)
                                AND vc.vendor_id IN (SELECT vendor_id FROM filtered_vendor_ids)
                                AND vc.CONT_START <= CURRENT_DATE()
                                AND (vc.CONT_END > CURRENT_DATE() OR vc.CONT_END IS NULL)
                        )
                        SELECT
                            vr.VENDOR_ID AS vendor_id,
                            cou.COUNTRY_CODE AS COUNTRY_CODE,
                            'carveout' AS policy, 
                            NULL as start_date
                        FROM
                            ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.CUSTOMER_MASTER AS cm
                            INNER JOIN vendor_dms_restriction AS vr ON vr.DMS_ID = cm.CUSTOMER_ID
                            INNER JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.COUNTRY AS cou ON cou.ID = cm.TERRITORY
                            INNER JOIN territories_in_registry tir ON tir.TERRITORY = cou.COUNTRY_CODE
                        WHERE cm.customer_master_master_id = 453
                        GROUP BY
                            1, 2
                    ),
                    global_carveouts AS (
                        SELECT
                            vc.VENDOR_ID,
                            tir.territory as country_code,
                            'carveout' AS policy,
                            NULL AS start_date
                        FROM
                            ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR_DMS_MASTER_RESTRICTION AS vmr
                            INNER JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR_CONTRACT AS vc 
                            ON vc.ID = vmr.VENDOR_CONTRACT_ID
                            AND vc.CONT_START <= CURRENT_DATE()
                            AND vc.CONT_END > CURRENT_DATE()
                            AND vmr.DISTRIBUTION_TYPE_ID = 1
                        FULL OUTER JOIN territories_in_registry tir
                        WHERE
                            vc.vendor_id in (SELECT vendor_id FROM filtered_vendor_ids)
                            AND vmr.customer_master_master_id = 453
                        GROUP BY
                            1, 2, 3
                    ),
                    carveouts_per_territory AS (
                        SELECT * FROM contract_territory_carveouts
                        UNION
                        SELECT * FROM contract_dms_territory_carveouts
                        UNION
                        SELECT * FROM global_carveouts
                    ),
                    monetize_rules AS (
                        SELECT fvi.vendor_id, tir.territory AS country_code, 'monetize' AS policy, earliest_ingestion_completed as start_date
                        FROM filtered_vendor_ids fvi
                        INNER JOIN vendor_to_earliest_ingestion_completed vteic ON fvi.vendor_id = vteic.vendor_id
                        FULL OUTER JOIN territories_in_registry tir
                        WHERE (fvi.vendor_id, tir.territory) NOT IN (SELECT vendor_id, country_code FROM carveouts_per_territory )
                    )
                    SELECT * FROM carveouts_per_territory
                    UNION
                    SELECT * FROM monetize_rules
                    ORDER BY 1, 2
                    ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH(vendor:Vendor),(rule:FingerprintRule)
                WHERE vendor.id = event.VENDOR_ID
                    AND rule.territory = event.COUNTRY_CODE
                    AND rule.service = 'youtube'
                    AND rule.policy = event.POLICY
                MERGE (vendor)-[rel:HAS_FINGERPRINT_RULE]->(rule)
                SET
                    rel.start = datetime(event.START_DATE),
                    rel.createdAt = datetime(),
                    rel.createdBy = 'database/SR-904/179/OrchAdminProfile',
                    rel.lastModifiedAt = datetime(),
                    rel.lastModifiedBy = 'database/SR-904/179/OrchAdminProfile'
                RETURN rel
            ]]>
        </cypherquery>
    </changeset>
</changelog>