{% macro mapping_table(caption='', field_headings=[], field_headings_visible=True, caption_visible=True, equal_length=False) -%}
  <table class="usa-table usa-table--borderless width-full">
    <caption class="font-body-lg table-heading{{ ' usa-sr-only' if not caption_visible}}">
      {{ caption }}
    </caption>
    <thead class="table-field-headings{% if field_headings_visible %}-visible{% endif %}">
      <tr>
        {% for field_heading in field_headings %}
          <th scope="col" class="table-field-heading{% if loop.first %}-first{% endif %}" width="{% if equal_length %}{{ (100 / field_headings|length)|int }}%{% endif %}">
            {% if field_headings_visible %}
              {{ field_heading }}
            {% else %}
              <span>{{ field_heading }}</span>
            {% endif %}
          </th>
        {% endfor %}
      </tr>
    </thead>
    <tbody>
      {{ caller() }}
    </tbody>
  </table>
{%- endmacro %}

{% macro list_table(items, caption='', empty_message='', field_headings=[], field_headings_visible=True, caption_visible=True, equal_length=False) -%}
  {% set parent_caller = caller %}

  {% call mapping_table(caption, field_headings, field_headings_visible, caption_visible, equal_length) %}
    {% for item in items %}
      {% call row(item.id) %}
        {{ parent_caller(item, loop.index + 1) }}
      {% endcall %}
    {% endfor %}
    {% if not items %}
      {% call row() %}
        <td class="table-empty-message" colspan="10">
          {{ empty_message }}
        </td>
      {% endcall %}
    {% endif %}
  {%- endcall %}

{%- endmacro %}

{% macro row(id=None) -%}
  <tr class="table-row" {% if id and id is string %}id="{{id}}"{% endif %}>
    {{ caller() }}
  </tr>
{%- endmacro %}

{% macro row_group(id=None) %}
  <tbody class="table-row-group" {% if id %}id="{{id}}"{% endif %}>
    {{ caller() }}
  </tbody>
{%- endmacro %}

{% macro settings_row(if_has_permission='') -%}
  {% set parent_caller = caller %}
  {% if if_has_permission in current_service.permissions %}
    {% call row() %}
      {{ parent_caller() }}
    {% endcall %}
  {% endif %}
{%- endmacro %}

{% macro field(align='left', status='', border=True, colspan=None, wrap=False) -%}

    {% set field_alignment =
    'table-field-right-aligned' if align == 'right' else
    'table-field-center-aligned' if align == 'center' else
    'table-field-left-aligned'
    %}
    {% set border = '' if border else 'table-field-noborder' %}
    {% set wrap = 'table-field-wrap-text' if wrap else '' %}

    <td class="{{ [field_alignment, border, wrap]|join(' ') }}" {% if colspan %}colspan="{{ colspan }}"{% endif %}>
      <div class="{{ 'table-field-status-' + status if status }}">{{ caller() }}</div>
    </td>
{%- endmacro %}

{% macro row_heading() -%}
  <th class="table-field">
    {{ caller() }}
  </th>
{%- endmacro %}

{% macro index_field(text=None, rowspan=None) -%}
  <td class="table-field-index" {% if rowspan %}rowspan="{{ rowspan }}"{% endif %}>
    {{ text if text != None else caller()  }}
  </td>
{%- endmacro %}

{% macro text_field(text, status='', truncate=false, wrap=False) -%}
  {% call field(status=status, wrap=wrap) %}
    {% if text is iterable and text is not string %}
      <ul>
        {% for item in text %}
          {% if item %}
            <li>{{ item }}</li>
          {% endif %}
        {% endfor %}
      </ul>
    {% else %}
      {% if truncate %}
        <div class="truncate-text" title="{{ text }}">{{text}}</div>
      {% else %}
        {{ text }}
      {% endif %}
    {% endif %}
  {% endcall %}
{%- endmacro %}

{% macro optional_text_field(text, default='Not set', truncate=false, wrap=False) -%}
  {{ text_field(
    text or default,
    status='' if text else 'default',
    truncate=truncate,
    wrap=wrap
  ) }}
{%- endmacro %}

{% macro link_field(text, link) -%}
  {% call field() %}
    <a class="usa-link" href="{{ link }}">{{ text }}</a>
  {% endcall %}
{%- endmacro %}

{% macro edit_field(text, link, permissions=[], suffix=None) -%}
  {% call field(align='right') %}
    {% if not permissions or current_user.has_permissions(*permissions) %}
      <a class="usa-link" href="{{ link }}">
        {{ text }}
        {%- if suffix %}<span class="usa-sr-only"> {{ suffix }}</span>{% endif -%}
      </a>
    {% endif %}
  {% endcall %}
{%- endmacro %}

{% macro boolean_field(value) -%}
  {{ text_field('On' if value else 'Off') }}
{%- endmacro %}

{% macro right_aligned_field_heading(text) %}
  <span class="table-field-heading-right-aligned">{{ text }}</span>
{%- endmacro %}

{% macro hidden_field_heading(text) %}
  <span class="usa-sr-only">{{ text }}</span>
{%- endmacro %}


{% macro notification_status_field(notification) %}

  {% set displayed_on_single_line = notification.status in ['created', 'pending', 'sending', 'delivered', 'accepted', 'received'] %}

  {% if not notification %}
    {% call field(align='right') %}{% endcall %}
  {% else %}
    {% set status = notification.status|format_notification_status_as_field_status(notification.notification_type) %}
    {% call field(
      status=status,
      align='right'
    ) %}
      {% if displayed_on_single_line %}<span class="align-with-message-body">{% endif %}
      {% if notification.status|format_notification_status_as_url(notification.notification_type) %}
        <a class="usa-link" href="{{ notification.status|format_notification_status_as_url(notification.notification_type) }}">
      {% endif %}
      {{ notification.status|format_notification_status(notification.template.template_type) }}
      {% if notification.status|format_notification_status_as_url(notification.notification_type) %}
        </a>
      {% endif %}
      <p class="status-hint margin-0 width-card ">
        {{ notification.status|format_notification_status_as_time(
          notification.created_at|format_datetime_short,
          (notification.updated_at or notification.created_at)|format_datetime_short
        ) }}
        </p>
      {% if displayed_on_single_line %}</span>{% endif %}
    {% endcall %}
  {% endif %}
{% endmacro %}

{% macro notification_carrier_field(notification) %}

  <!-- {% set displayed_on_single_line = notification.status in ['created', 'pending', 'sending', 'delivered', 'accepted', 'received'] %} -->

  {% if not notification %}
    {% call field(align='right') %}{% endcall %}
  {% else %}
    <!-- {% set status = notification.status|format_notification_status_as_field_status(notification.notification_type) %} -->
    {% call field(
      align='right'
    ) %}
      <p class="status-hint margin-0 width-card">
        {{ notification.carrier}}
        </p>
      {% if displayed_on_single_line %}</span>{% endif %}
    {% endcall %}
  {% endif %}
{% endmacro %}

{% macro notification_carrier_message_field(notification) %}

  {% if not notification %}
    {% call field(align='right') %}{% endcall %}
    {% else %}
    <!-- {% set status = notification.status|format_notification_status_as_field_status(notification.notification_type) %} -->
    {% call field(
      status=status,
      align='right'
    ) %}
      <p class="status-hint margin-0 width-card">
        {{notification.provider_response}}
        </p>
      {% if displayed_on_single_line %}</span>{% endif %}
    {% endcall %}
  {% endif %}
{% endmacro %}

{% macro spark_bar_field(
  count,
  max_count,
  id=None
) %}
  {% call field(align='right') %}
    <span {% if id %}id="{{ id }}"{% endif %} class="spark-bar">
      <span class="spark-bar-bar">
        {{ '{:,.0f}'.format(count) }}
          <!-- {% if count == 1 -%}
            message sent
          {% else -%}
            messages sent
          {% endif %} -->
      </span>
    </span>
  {% endcall %}
{% endmacro %}
