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

import pscheduler

from validate import spec_is_valid
from validate import MAX_SCHEMA

TEMPLATE='''
{%- set schema = 1 if schema is undefined else schema -%}
{% if _mime_type == 'text/plain' %}

Source ............... {{ unspec(source) }}
Source Node .......... {{ unspec(sourcenode) }}
Destination .......... {{ unspec(dest) }}
Destination Node ..... {{ unspec(destnode) }}
{% if schema >= 4 -%}
Protocol ............. {{ unspec(protocol) }}
{%- endif %}
Packet Count ......... {{ unspec(packetcount) }}
Packet Interval ...... {{ unspec(packetinterval) }}
Packet Timeout ....... {{ unspec(packettimeout) }}
Packet Padding ....... {{ unspec(packetpadding) }}
Control Port ......... {{ unspec(ctrlport) }}
{%- if dataports is defined %}
Data Ports ........... {{ unspec(dataports.lower) }}-{{ unspec(dataports.upper) }}
{%- else %}
Data Ports ........... {{ unspec(not_specified) }}
{%- endif %}
IP TOS ............... {{ unspec(iptos) }}
IP Version ........... {{ unspec(ipversion) }}
Bucket Width ......... {{ unspec(bucketwidth) }}
Output Raw Packets ... {{ unspec(outputraw) }}
Flip Mode ............ {{ unspec(flip) }}
{% if schema >= 2 -%}
Reverse .............. {{ unspec(reverse) }}
{%- endif %}
{% if schema >= 3 -%}
NAT Traversal ........ {{ unspec(traversenat) }}
{%- endif %}

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

<table>
<tr><td>Source</td><td>{{ unspec(source) }}</td></tr>
<tr><td>Source Node</td><td>{{ unspec(sourcenode) }}</td></tr>
<tr><td>Destination</td><td>{{ unspec(dest) }}</td></tr>
<tr><td>Destination Node</td><td>{{ unspec(destnode) }}</td></tr>
<tr><td>Packet Count</td><td>{{ unspec(packetcount) }}</td></tr>
<tr><td>Packet Interval</td><td>{{ unspec(packetinterval) }}</td></tr>
<tr><td>Packet Timeout</td><td>{{ unspec(packettimeout) }}</td></tr>
<tr><td>Packet Padding</td><td>{{ unspec(packetpadding) }}</td></tr>
<tr><td>Control Port</td><td>{{ unspec(ctrlport) }}</td></tr>
{%- if dataports is defined %}
<tr><td>Data Ports</td><td>{{ unspec(dataports.lower) }}-{{ unspec(dataports.upper) }}</td></tr>
{%- else %}
<tr><td>Data Ports</td><td>{{ unspec(not_specified) }}</td></tr>
{%- endif %}
<tr><td>IP TOS</td><td>{{ unspec(iptos) }}</td></tr>
<tr><td>IP Version</td><td>{{ unspec(ipversion) }}</td></tr>
<tr><td>Bucket Width</td><td>{{ unspec(bucketwidth) }}</td></tr>
<tr><td>Output Raw Packets</td><td>{{ unspec(outputraw) }}</td></tr>
<tr><td>Flip Mode</td><td>{{ unspec(flip) }}</td></tr>
{% if schema >= 2 -%}
<tr><td>Reverse</td><td>{{ unspec(reverse) }}</td></tr>
{%- endif %}
{% if schema >= 3 -%}
<tr><td>NAT Traversal</td><td>{{ unspec(traversenat) }}</td></tr>
{%- endif %}
</table>

{% else %}

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

{% endif %}
'''

pscheduler.spec_format_method(TEMPLATE, max_schema=MAX_SCHEMA, validator=spec_is_valid)
