{#
Evaluates the priority of a particular setting across different scopes.

The priority is as follows: page > section > config.

Parameters:
    - setting: The name of the setting to evaluate.
    - page: The page object containing settings.
    - default_global_value: The setting's default value.
#}

{% macro evaluate_setting_priority(setting, page, section="", default_global_value="") %}

{%- if section -%}
    {%- set current_section = section -%}
{%- elif page -%}
    {%- set current_section = "" -%}
    {#- Retrieve last ancestor to determine current section, if applicable -#}
    {%- if page.ancestors | length > 0 -%}
        {%- set last_ancestor = page.ancestors | slice(start=-1) -%}
        {%- set_global current_section = get_section(path=last_ancestor.0, metadata_only=true) -%}
    {%- else -%}
        {#- We're likely in a nested page. Try to find the parent page or nearest section. -#}
        {%- set components = page.components -%}
        {%- for i in range(start=1, end=components | length) -%}
            {%- if lang == config.default_language -%}
                {%- set potential_path = components | slice(end=components | length - i) | join(sep="/") -%}
                {%- set potential_page = potential_path ~ "/index.md" -%}
                {%- set potential_section = potential_path ~ "/_index.md" -%}
            {%- else -%}
                {%- set potential_path = components | slice(start=1, end=components | length - i) | join(sep="/") -%}
                {%- set potential_page = potential_path ~ "/index." ~ lang ~ ".md" -%}
                {%- set potential_section = potential_path ~ "/_index." ~ lang ~ ".md" -%}
            {%- endif -%}
            {#- Check for parent page first. -#}
            {%- set page_data = load_data(path=potential_page, required=false) -%}
            {%- if page_data -%}
                {%- set_global current_section = get_page(path=potential_page) -%}
                {%- break -%}
            {%- endif -%}
            {#- No parent page, check for section. -#}
            {%- set section_data = load_data(path=potential_section, required=false) -%}
            {%- if section_data -%}
                {%- set_global current_section = get_section(path=potential_section, metadata_only=true) -%}
                {%- break -%}
            {%- endif -%}
        {%- endfor -%}
    {%- endif -%}
{%- endif -%}

{%- set priority_order = [
    page.extra[setting] | default(value=""),
    current_section.extra[setting] | default(value=""),
    config.extra[setting] | default(value="")
] -%}

{%- set output = default_global_value -%}

{%- for value in priority_order -%}
    {%- if value != "" -%}
        {%- set_global output = value -%}
        {%- break -%}
    {%- endif -%}
{%- endfor -%}

{{- output -}}

{% endmacro %}
