/*
Macro: get_kpi_dimensions_for_production

Provides the list of Dimensions that will be available in production for the Main KPIs.
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'",
        },
        {
            "dimension": "'by_billing_country'",
            "dimension_display": "'By Billing Country'",
        },
    ] %}
    {{ return(dimensions) }}
{% endmacro %}

{% macro capitalise_and_remove_underscores(field_name) %}
    initcap(regexp_replace({{ field_name }}, '_', ' ', 'g'))
{% 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_business_scope() %}
    {{
        return(
            {"dimension": "'by_business_scope'", "dimension_value": "business_scope"}
        )
    }}
{% endmacro %}
{% macro dim_has_payment() %}
    {{ return({"dimension": "'by_has_payment'", "dimension_value": "has_payment"}) }}
{% endmacro %}
{% macro dim_has_id_check() %}
    {{ return({"dimension": "'by_has_id_check'", "dimension_value": "has_id_check"}) }}
{% endmacro %}
{% macro dim_has_upgraded_service() %}
    {{
        return(
            {
                "dimension": "'by_has_upgraded_service'",
                "dimension_value": "is_upgraded_service",
            }
        )
    }}
{% endmacro %}
{% macro dim_pricing_service() %}
    {{
        return(
            {
                "dimension": "'by_service'",
                "dimension_value": "service_name",
            }
        )
    }}
{% endmacro %}
{% macro dim_pricing_business_type() %}
    {{
        return(
            {
                "dimension": "'by_service_business_type'",
                "dimension_value": "service_business_type",
            }
        )
    }}
{% endmacro %}
{% macro dim_new_dash_version() %}
    {{
        return(
            {
                "dimension": "'by_new_dash_version'",
                "dimension_value": "new_dash_version",
            }
        )
    }}
{% endmacro %}
/*
Macro: get_kpi_dimensions_per_model

Provides a general assignement 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(),
    ] %}

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

    {# Adds Deal dimension to all models except DEAL metrics #}
    {% if entity_name != "DEALS" %}
        {% set additional_dimensions = additional_dimensions + [dim_deal()] %}
    {% endif %}

    {# Add entity-specific dimensions #}
    {% if entity_name in [
        "CHECK_OUT_BOOKINGS",
        "COMPLETED_GUEST_JOURNEYS",
        "CREATED_BOOKINGS",
        "CREATED_GUEST_JOURNEYS",
        "GUEST_JOURNEYS_WITH_PAYMENT",
        "GUEST_PAYMENTS",
        "STARTED_GUEST_JOURNEYS",
    ] %}
        {% set additional_dimensions = additional_dimensions + [dim_business_scope()] %}
    {% endif %}

    {% if entity_name == "CHECK_IN_ATTRIBUTED_GUEST_JOURNEYS" %}
        {% set additional_dimensions = additional_dimensions + [
            dim_has_payment(),
            dim_has_id_check(),
        ] %}
    {% endif %}

    {% if entity_name == "GUEST_PAYMENTS" %}
        {% set additional_dimensions = additional_dimensions + [
            dim_has_id_check(),
        ] %}
    {% endif %}

    {% if entity_name == "NEW_DASH_CREATED_SERVICES" %}
        {% set additional_dimensions = additional_dimensions + [
            dim_has_upgraded_service(),
            dim_new_dash_version(),
            dim_pricing_service(),
            dim_pricing_business_type(),
        ] %}
    {% endif %}

    {% if entity_name == "NEW_DASH_CHARGEABLE_SERVICES" %}
        {% set additional_dimensions = additional_dimensions + [
            dim_has_upgraded_service(),
            dim_new_dash_version(),
            dim_pricing_service(),
            dim_pricing_business_type(),
        ] %}
    {% endif %}

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