{{ config(materialized="table") }}

{% set ok_status = "Approved" %}
with
    int_athena__verifications as (select * from {{ ref("int_athena__verifications") }}),
    stg_seed__athena_price_history as (
        select * from {{ ref("stg_seed__athena_price_history") }}
    ),
    -- CTE to rank verifications by updated_at_utc per id_booking
    ranked_verifications as (
        select
            v.*,
            row_number() over (
                partition by v.id_booking order by v.updated_at_utc asc
            ) as rn
        from int_athena__verifications v
        where v.version = 'V1' and v.id_booking is not null
    )
select
    v.id_verification,
    v.id_booking,
    v.verification_status,
    v.is_cancelled,
    -- Charge for 1 night if number_nights = 0
    case
        when v.number_nights = 0 and v.verification_status = '{{ ok_status }}'
        then ph.fee_per_night_gbp
        when v.verification_status = '{{ ok_status }}'
        then v.number_nights * ph.fee_per_night_gbp
        else 0
    end as ok_status_fee_in_gbp,
    v.created_date_utc,
    v.checkin_date_utc,
    v.checkout_date_utc
from ranked_verifications v
left join
    stg_seed__athena_price_history ph
    -- The following condition ensures avoiding duplicates.
    -- Keep in mind that the start_at_utc is inclusive to the price,
    -- while the end_at_utc is exclusive.
    on v.checkout_at_utc >= ph.start_at_utc
    and v.checkout_at_utc < ph.end_at_utc
where
    -- Select only the most recent verification for each id_booking
    v.rn = 1
