#!/usr/bin/env python3
#
# Format a 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['oidargs']):
    oid_str += oid
    if i != len(json['oidargs']) - 1:
        oid_str += ', '
json['oidargs'] = 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}
OID ........................ {.section oid}{oid}{.or}Not Specified{.end}
Vartype ........................ {.section vartype}{vartype}{.or}Not Specified{.end}
Varvalue ........................ {.section varvalue}{varvalue}{.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>OID</td><td>{.section oid}{oid}{.or}Not Specified{.end}</td></tr>
<tr><td>Vartype</td><td>{.section vartype}{vartype}{.or}Not Specified{.end}</td></tr>
<tr><td>Varvalue</td><td>{.section varvalue}{varvalue}{.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())
