<?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-486_backfill_vendors:1"
     author="nlittmann"
     run-always="true"
     topic="event.orchardSoundRecording.fingerprintRules">
        <precondition>
            <sqlquery>
                <![CDATA[
                    WITH service_ids_to_names AS (
                        SELECT
                            *
                        FROM
                        VALUES
                            (1294, 'tiktok'),
                            (1173, 'meta') AS services (service_id, service_name)
                    ),
                    filtered_vendor_ids AS (
                            SELECT * 
                            FROM
                            VALUES
                                (26760),
                                (41936),
                                (21989),
                                (32679)
                            AS vendor_id (vendor_id)
                    ),
                    territories_in_registry AS (
                        SELECT DISTINCT(territory) AS TERRITORY FROM FACTS.<SCHEMA_NAME>.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()
                    ),
                    contract_territory_carveouts AS (
                        SELECT ctcs.vendor_id, cou.country_code, sitn.service_id
                        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
                        FULL OUTER JOIN service_ids_to_names sitn
                    ),
                    contract_dms_carveouts AS (
                        WITH 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 IS NOT NULL
                                AND vc.vendor_id in (SELECT vendor_id FROM filtered_vendor_ids)
                                AND vc.CONT_START <= CURRENT_DATE()
                                AND vc.CONT_END > CURRENT_DATE()
                        )
                        SELECT
                            vr.VENDOR_ID AS vendor_id,
                            cou.COUNTRY_CODE AS COUNTRY_CODE,
                            cm.CUSTOMER_MASTER_MASTER_ID AS service_id
                        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 service_ids_to_names sitn ON sitn.service_id = cm.CUSTOMER_MASTER_MASTER_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
                        GROUP BY
                            1, 2, 3
                    ),
                    vendor_rules AS (
                        WITH per_territory AS (
                            SELECT * FROM contract_territory_carveouts
                            UNION
                            SELECT * FROM contract_dms_carveouts
                        ),
                        star AS (
                            SELECT
                                vc.VENDOR_ID,
                                vmr.CUSTOMER_MASTER_MASTER_ID AS service_id
                            FROM
                                ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR_DMS_MASTER_RESTRICTION AS vmr
                                INNER JOIN service_ids_to_names sitn ON sitn.service_id = vmr.CUSTOMER_MASTER_MASTER_ID
                                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
                                
                            WHERE
                                vc.vendor_id in (SELECT vendor_id FROM filtered_vendor_ids)
                            GROUP BY
                                1, 2
                        )
                        SELECT
                            sitn.service_name,
                            v.VENDOR_ID,
                            vteic.earliest_ingestion_completed,
                            LISTAGG(DISTINCT(per_territory.COUNTRY_CODE), ',') WITHIN GROUP (
                                ORDER BY
                                    per_territory.COUNTRY_CODE
                            ) AS territory_carveouts,
                            star.vendor_id IS NOT NULL AS star_carveout,
                            LISTAGG(DISTINCT(hr1.TERRITORY), ',') WITHIN GROUP (
                                ORDER BY
                                    hr1.TERRITORY
                            ) AS territory_rules,
                            hr2.service IS NOT NULL AS star_rule
                        FROM
                            ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.VENDOR AS v 
                            FULL OUTER JOIN service_ids_to_names AS sitn
                            INNER JOIN vendor_to_earliest_ingestion_completed AS vteic ON v.VENDOR_ID = vteic.VENDOR_ID
                            LEFT JOIN per_territory ON per_territory.VENDOR_ID = v.VENDOR_ID
                            AND per_territory.service_id = sitn.service_id
                            LEFT JOIN star ON star.VENDOR_ID = v.VENDOR_ID
                            AND star.service_id = sitn.service_id
                            LEFT JOIN FACTS.<SCHEMA_NAME>.HAS_FINGERPRINT_RULE AS hr1 ON TRY_TO_NUMBER(hr1.ORCHARD_OBJ_ID) = v.VENDOR_ID
                            AND hr1.ORCHARD_OBJ_TYPE = 'Vendor'
                            AND hr1.SERVICE = sitn.service_name
                            AND hr1."POLICY" != 'carveout'
                            AND hr1.TERRITORY != '*'
                            LEFT JOIN FACTS.<SCHEMA_NAME>.HAS_FINGERPRINT_RULE AS hr2 ON TRY_TO_NUMBER(hr2.ORCHARD_OBJ_ID) = v.VENDOR_ID
                            AND hr2.ORCHARD_OBJ_TYPE = 'Vendor'
                            AND hr2.SERVICE = sitn.service_name
                            AND hr2."POLICY" != 'carveout'
                            AND hr2.TERRITORY = '*'
                        WHERE
                            v.STATUS = 'signed'
                            AND v.VENDOR_ID in (SELECT vendor_id FROM filtered_vendor_ids)
                        GROUP BY
                            1, 2, 3, 5, 7
                        HAVING
                            (
                                STAR_CARVEOUT = TRUE
                                AND (
                                    TERRITORY_RULES != ''
                                    OR STAR_RULE = TRUE
                                )
                            )
                            OR (
                                STAR_CARVEOUT = FALSE
                                AND ARRAY_SIZE(
                                    ARRAY_DISTINCT(
                                        ARRAY_REMOVE(
                                            ARRAY_CAT(
                                                SPLIT(TERRITORY_CARVEOUTS, ','),
                                                SPLIT(TERRITORY_RULES, ',')
                                            ),
                                            '' ::VARIANT
                                        )
                                    )
                                ) BETWEEN 1
                                AND 248
                            )
                            OR (
                                STAR_CARVEOUT = FALSE
                                AND TERRITORY_CARVEOUTS = ''
                                AND STAR_RULE = FALSE
                            )
                    )
                    SELECT
                        CONCAT('vendor_id:', vendor_id) AS KEY,
                        ARRAY_AGG(
                            OBJECT_CONSTRUCT(
                                'territory_carveouts',
                                TERRITORY_CARVEOUTS,
                                'star_carveout',
                                STAR_CARVEOUT,
                                'territory_rules',
                                TERRITORY_RULES,
                                'star_rule',
                                STAR_RULE,
                                'start_date',
                                EARLIEST_INGESTION_COMPLETED,
                                'service',
                                service_name
                            )
                        ) WITHIN GROUP (
                            ORDER BY
                                service_name
                        ) AS VALUE
                    FROM
                        vendor_rules
                    GROUP BY
                        1
                    ORDER BY
                        1
                ]]>
            </sqlquery>
        </precondition>
    </changeset>
</changelog>
