#!python

'''
description:    Create a db entry for a VOEvent: Runner
license:        APACHE 2.0
author:         Ronald van Haren, NLeSC (r.vanharen@esciencecenter.nl)
'''

import configargparse
from pyfrbcatdb import decode_VOEvent
from pyfrbcatdb import writeCSV
import sys
import os


def cli_parser():
    '''
    parse command line arguments:
        should be single/multiple valid VOEvent xml files
    '''
    cfile = os.path.join(sys.prefix, 'etc', 'pyfrbcatdb', 'dbase.config')
    parser = configargparse.ArgumentParser(
      default_config_files=[cfile],
      description='Process VOEvent XML file and add it to FRB database')
    parser.add('-c', '--my-config', required=False, is_config_file=True,
               help='config file path')
    parser.add('--dbName', required=True, help='name postgres database',
               env_var='dbNameFRBCat')
    parser.add('--dbHost', help='name postgres database',
               env_var='dbHostFRBCat')
    parser.add('--dbPort', help='name postgres database',
               env_var='dbPortFRBCat')
    parser.add('--dbUser', required=True, help='user postgres database',
               env_var='dbUserFRBCat')
    parser.add('--dbPassword', help='user postgres database password',
               env_var='dbPasswordFRBCat')
    parser.add('--CSV', help='CSV filename to dump database to',
               env_var="CSVFRBCat")
    parser.add('--log', type=str, default=os.path.join(
      os.path.expanduser("~"), 'pyfrbcatdb_decode.log'
      ), help='log file, default=[HOME]/pyfrbcatdb_decode.log')
    parser.add('VOEvents', metavar='VOEvent',
               type=configargparse.FileType('rb'), nargs='*',
               help='List of VOEvent XML files')
    results = parser.parse_args()
    # print help message of no VOEvents are supplied and
    # no CSV file needs to be written
    if not (results.VOEvents or (results.CSV and results.CSV is not "=")):
        parser.print_help()
    return results


if __name__ == "__main__":
    results = cli_parser()
    for voevent in results.VOEvents:
        decode_VOEvent.decode_VOEvent(voevent, results.dbName,
                                      results.dbHost, results.dbPort,
                                      results.dbUser, results.dbPassword,
                                      results.log)
        voevent.close()
    # write database to CSV file
    writeCSV.writeCSV(results.CSV,  results.dbName, results.dbHost,
                      results.dbPort, results.dbUser, results.dbPassword,
                      results.log)
