{{ config(materialized="table", unique_key="id_deal") }}
with
    hubspot_deals as (
        select
            id_deal,
            deal_pipeline,
            deal_name as main_deal_name,
            live_date_utc as deal_start_date,
            date_trunc('month', live_date_utc) as deal_start_month,
            cancellation_date_utc as deal_cancellation_date,
            date_trunc('month', cancellation_date_utc) as deal_cancellation_month,
            case
                when amount_of_properties between 1 and 5
                then '01-05'
                when amount_of_properties between 6 and 20
                then '06-20'
                when amount_of_properties between 21 and 60
                then '21-60'
                when amount_of_properties >= 61
                then '61+'
                else 'UNSET'
            end as hubspot_listing_segmentation
        from {{ ref("int_hubspot__deal") }}
        where live_date_utc is not null
    ),
    core_deals as (
        select
            id_deal,
            main_deal_name,
            has_active_pms,
            active_pms_list,
            first_created_date_utc as deal_start_date,
            date_trunc('month', first_created_date_utc) as deal_start_month,
            main_billing_country_iso_3_per_deal
        from {{ ref("int_core__deal") }}
    ),
    combined_deals as (
        select
            coalesce(hd.id_deal, cd.id_deal) as id_deal,
            coalesce(hd.main_deal_name, cd.main_deal_name) as main_deal_name,
            coalesce(cd.has_active_pms, false) as has_active_pms,
            cd.active_pms_list,
            cd.main_billing_country_iso_3_per_deal,
            case
                when upper(hd.deal_pipeline) in ('API SALES') then 'API' else 'PLATFORM'
            end as client_type,
            min(
                coalesce(hd.deal_start_date, cd.deal_start_date)
            ) as effective_deal_start_date_utc,
            min(
                coalesce(hd.deal_start_month, cd.deal_start_month)
            ) as effective_deal_start_month,
            min(hd.deal_cancellation_date) as hubspot_deal_cancellation_date_utc,
            min(hd.deal_cancellation_month) as hubspot_deal_cancellation_month,
            min(hd.hubspot_listing_segmentation) as hubspot_listing_segmentation
        from hubspot_deals hd
        full outer join core_deals cd on hd.id_deal = cd.id_deal
        group by 1, 2, 3, 4, 5, 6
    )
select
    cd.id_deal,
    cd.main_deal_name,
    cd.has_active_pms,
    cd.active_pms_list,
    cd.client_type,
    cd.main_billing_country_iso_3_per_deal,
    cd.effective_deal_start_date_utc,
    cd.effective_deal_start_month,
    cd.hubspot_deal_cancellation_date_utc,
    cd.hubspot_deal_cancellation_month,
    cd.hubspot_listing_segmentation
from combined_deals cd
