/*
Macro: get_kpi_dimensions

Provides a general configuration for the Dimensions available for the KPIs.
Please note that strings should be encoded with " ' your_value_here ' ",
    while fields from tables should be specified like " your_field_here "
*/
{% macro get_kpi_dimensions() %}
    {% set dimensions = [
        {"dimension": "'global'", "dimension_value": "'global'"},
        {
            "dimension": "'by_number_of_listings'",
            "dimension_value": "active_accommodations_per_deal_segmentation",
        },
        {
            "dimension": "'by_billing_country'",
            "dimension_value": "main_billing_country_iso_3_per_deal",
        },
    ] %}
    {{ return(dimensions) }}
{% endmacro %}


/*
Macro: get_kpi_dimensions_for_production

Provides the list of Dimensions that will be available in production for the KPIs.
This configuration ensures that working with new dimensions won't affect the display 
    until all development work has been done. 
Additionally, it provides a proper display name for reporting purposes.

*/
{% macro get_kpi_dimensions_for_production() %}
    {% set dimensions = [
        {"dimension": "'global'", "dimension_display": "'Global'"},
        {
            "dimension": "'by_number_of_listings'",
            "dimension_display": "'By # of Listings Booked in 12 Months'",
        },
        {
            "dimension": "'by_billing_country'",
            "dimension_display": "'By Billing Country'",
        },
    ] %}
    {{ return(dimensions) }}
{% endmacro %}

/*
The following lines specify for each dimension the field to be used in a 
standalone macro.
Please note that strings should be encoded with " ' your_value_here ' ",
    while fields from tables should be specified like " your_field_here "
*/
{% macro dim_global() %}
    {{ return({"dimension": "'global'", "dimension_value": "'global'"}) }}
{% endmacro %}
{% macro dim_billing_country() %}
    {{
        return(
            {
                "dimension": "'by_billing_country'",
                "dimension_value": "main_billing_country_iso_3_per_deal",
            }
        )
    }}
{% endmacro %}
{% macro dim_number_of_listings() %}
    {{
        return(
            {
                "dimension": "'by_number_of_listings'",
                "dimension_value": "active_accommodations_per_deal_segmentation",
            }
        )
    }}
{% endmacro %}
{% macro dim_deal() %}
    {{ return({"dimension": "'by_deal'", "dimension_value": "id_deal"}) }}
{% endmacro %}
{% macro dim_dash() %}
    {{ return({"dimension": "'by_dash_source'", "dimension_value": "dash_source"}) }}
{% endmacro %}

/*
Macro: get_kpi_dimensions_per_model

Provides a general assignemnt for the Dimensions available for each KPI
    model. Keep in mind that these assignations need to be previously
    declared.

*/
{% macro get_kpi_dimensions_per_model(entity_name) %}

    {# Base dimensions shared by all models #}
    {% set base_dimensions = [
        dim_global(),
        dim_number_of_listings(),
        dim_billing_country(),
        dim_deal(),
    ] %}

    {# Initialize a list to hold any model-specific dimensions #}
    {% set additional_dimensions = [] %}

    {# Add entity-specific dimensions #}
    {% if entity_name == "CREATED_BOOKINGS" %}
        {% set additional_dimensions = [dim_dash()] %}
    {% endif %}

    {# Add entity-specific dimensions #}
    {% if entity_name == "GUEST_JOURNEY_METRICS" %}
        {% set additional_dimensions = [dim_has_payment(), dim_has_id_check()] %}
    {% endif %}

    {# Combine base dimensions with additional dimensions for the specific model #}
    {% set dimensions = base_dimensions + additional_dimensions %}
    {{ return(dimensions) }}
{% endmacro %}
