#!/usr/bin/env python3
#
# Format an snmpget test spec
#

import jsontemplate
import pscheduler
import sys

from validate import spec_is_valid


try:
    format = sys.argv[1]
except IndexError:
    format = 'text/plain'


json = pscheduler.json_load(exit_on_error=True)

valid, message = spec_is_valid(json)

if not valid:
    pscheduler.fail(message)

oid_str = ""
for i, oid in enumerate(json['oid']):
    oid_str += oid
    if i != len(json['oid']) - 1:
        oid_str += ', '
json['oid'] = oid_str

if format == 'text/plain':

    template = """
Host ........................... {.section host}{host}{.or}Not Specified{.end}
Host Node ...................... {.section host_node}{host_node}{.or}Not Specified{.end}
Destination .................... {.section dest}{dest}{.or}Not Specified{.end}
Version ........................ {.section version}{version}{.or}Not Specified{.end}
Polls .......................... {.section polls}{polls}{.or}Not Specified{.end}
Period ......................... {.section period}{period}{.or}Not Specified{.end}
OID ............................ {.section oid}{oid}{.or}Not Specified{.end}
Protocol ....................... {.section protocol}{protocol}{.or}UDP{.end}
Timeout ........................ {.section timeout}{timeout}{.or}Not Specified{.end}"""

    if json['version'] == '3': 
        template = template + """
Security Name .................. {.section security_name}{security_name}{.or}Not Specified{.end}
Authentication Protocol ........ {.section auth_protocol}{auth_protocol}{.or}Not Specified{.end}
Privacy Protocol ............... {.section priv_protocol}{priv_protocol}{.or}Not Specified{.end}
Security Level ................. {.section security_level}{security_level}{.or}Not Specified{.end}
Context ........................ {.section context}{context}{.or}Not Specified{.end}"""

elif format == 'text/html':

    template = """
<table>
<tr><td>Host</td><td>{.section host}{host}{.or}Not Specified{.end}</td></tr>
<tr><td>Host Node</td><td>{.section host-node}{host_node}{.or}Not Specified{.end}</td></tr>
<tr><td>Destination</td><td>{.section dest}{dest}{.or}Not Specified{.end}</td></tr>
<tr><td>Version</td><td>{.section version}{version}{.or}Not Specified{.end}</td></tr>
<tr><td>Polls</td><td>{.section polls}{polls}{.or}Not Specified{.end}</td></tr>
<tr><td>Period</td><td>{.section period}{period}{.or}Not Specified{.end}</td></tr>
<tr><td>OID</td><td>{.section oid}{oid}{.or}Not Specified{.end}</td></tr>
<tr><td>Protocol</td><td>{.section protocol}{protocol}{.or}Not Specified{.end}</td></tr>
<tr><td>Timeout</td><td>{.section timeout}{timeout}{.or}Not Specified{.end}</td></tr>"""

    if json['version'] == '3':

        template = template + """
<tr><td>Security Name</td><td>{.section security_name}{security_name}{.or}Not Specified{.end}</td></tr>
<tr><td>Authentication Protocol</td><td>{.section auth_protocol}{auth_protocol}{.or}Not Specified{.end}</td></tr>
<tr><td>Privacy Protocol</td><td>{.section priv_protocol}{priv_protocol}{.or}Not Specified{.end}</td></tr>
<tr><td>Security Level</td><td>{.section security_level}{security_levelsl}{.or}Not Specified{.end}</td></tr>
<tr><td>Context</td><td>{.section context}{context}{.or}Not Specified{.end}</td></tr>
</table>"""

    else:
        template = template + """
</table>"""

else:
    pscheduler.fail("Unsupported format '%s'" % format)


# TODO: Should probably handle exceptions in a nicer way.
print(jsontemplate.expand(template, json).strip())
