#!/usr/bin/env python

from __future__ import print_function

import emitter

class HTMLEmitter(emitter.Emitter):
    def preface(self):
        return """<!-- Dynamically generated list of Logger Messages
This page was generated using Tools/autotest/logger_metdata/parse.py

DO NOT EDIT
-->


<h3 style="text-align: center">Onboard Message Log Messages</h3>
<hr />

<p>This is a list of log messages which may be present in logs produced and stored onboard ArduPilot vehicles.</p>

<!-- add auto-generated table of contents with "Table of Contents Plus" plugin -->
[toc exclude="Onboard Message Log Messages"]

"""
    def postface(self):
        return ""

    def start(self):
        self.fh = open("LogMessages.html", mode='w')
        print(self.preface(), file=self.fh)

    def emit(self, doccos):
        self.start()
        for docco in doccos:
            print('    <h1>%s</h1>' % docco.name, file=self.fh)
            if docco.url is not None:
                print('        <a href="%s">More information</a>' % docco.url, file=self.fh)
            if docco.description is not None:
                print('        <h2>%s</h2>' %
                      docco.description, file=self.fh)
            print('        <table>', file=self.fh)
            print("        <tr><th>FieldName</th><th>Description</th><tr>",
                  file=self.fh)
            for f in docco.fields_order:
                if "description" in docco.fields[f]:
                    fdesc = docco.fields[f]["description"]
                else:
                    fdesc = ""
                print('        <tr><td>%s</td><td>%s</td></tr>' % (f, fdesc),
                      file=self.fh)
#                if "bits" in docco.fields[f]:
#                    print('                <bits>%s</bits>' %
#                          docco.fields[f]["bits"], file=self.fh)
            print('        </table>', file=self.fh)

            print("", file=self.fh)
        self.stop()

    def stop(self):
        print(self.postface(), file=self.fh)
        self.fh.close()
