#!/usr/bin/env python3
#
# Format a result
#

import pscheduler

from validate import result_is_valid
from validate import MAX_SCHEMA

TEMPLATE = '''
{% macro rtt_stat(iso) -%}
{% if iso is defined -%}
  {{ "%.4f" | format(iso8601_duration_seconds(iso) * 1000) }}
{%- else -%}
None
{%- endif -%}
{%- endmacro -%}

{% if _mime_type == 'text/plain' %}

{% for trip in result.roundtrips -%}
{{ "%-8d" | format(loop.index) }}
  {%- if trip.error is defined -%}
    {{ trip.error }}
  {%- elif trip.hostname is defined or trip.ip is defined -%}
    {%- if trip.hostname is defined -%}
      {{ trip.hostname}} ({{ trip.ip }})
    {%- else -%}
      {{ trip.ip}} ({{ trip.ip }})
    {%- endif -%}
    {{ "  %d Bytes  TTL %d  RTT %.4f ms"
       | format( trip.length, trip.ttl,
                 (iso8601_duration_seconds(trip.rtt) * 1000)
       ) }}
  {%- else -%}
    No Response
  {%- endif %}
{% endfor %}
\
{{ (result.loss * 100) | int }}% Packet Loss  \
\
{{ "RTT Min/Mean/Max/StdDev = %s/%s/%s/%s ms"
   | format( rtt_stat(result.min),
             rtt_stat(result.mean),
             rtt_stat(result.max),
             rtt_stat(result.stddev)
     ) }}

{% elif _mime_type == 'text/html' %}

<table>
<tr>
  <th>Packet</th>
  <th>Host</th>
  <th>Address</th>
  <th>Length</th>
  <th>TTL</th>
  <th>RTT (ms)</th>
</tr>

{% for trip in result.roundtrips -%}
  <tr>
    <td>{{ loop.index }}</td>
  {% if trip.error is defined -%}
    <td colspan="4">{{ trip.error }}</td>
  {%- elif trip.hostname is defined or trip.ip is defined -%}
    {%- if trip.hostname is defined -%}
      <td>{{ trip.hostname }}</td>
    {%- else -%}
      <td>{{ trip.ip }}</td>
    {%- endif -%}
      <td>{{ trip.ip }}</td>
      <td>{{ trip.length }}</td>
      <td>{{ trip.ttl }}</td>
      <td>{{ iso8601_duration_seconds(trip.rtt) * 1000 }}</td>
  {%- else -%}
    <td colspan="4">No Response</td>
  {%- endif %}
  </tr>
{% endfor %}

<tr><td colspan="5">{{ (result.loss * 100) | int }}% Packet Loss</td></tr>
<tr><td colspan="5">{{ "RTT Min/Mean/Max/StdDev = %s/%s/%s/%s ms"
   | format( rtt_stat(result.min),
             rtt_stat(result.mean),
             rtt_stat(result.max),
             rtt_stat(result.stddev)
     ) }}</td></tr>

</table>

{% else %}

{{ error('Unsupported MIME type "' + _mime_type + '"') }}

{% endif %}
'''

pscheduler.result_format_method(TEMPLATE, max_schema=MAX_SCHEMA, validator=result_is_valid)
