#!/usr/bin/env python3

# This is a command-line interface to the pycwb package. It provides options like
# pycwb create, pycwb run, pycwb server, etc. It is a wrapper around the pycwb package

import argparse
import pycwb.cli.server as server
import pycwb.cli.run as run
import pycwb.cli.flow as flow
import pycwb.cli.batch_setup as batch_setup
import pycwb.cli.batch_runner as batch_runner
import pycwb.cli.xtalk as xtalk
import pycwb.cli.merge_catalog as merge_catalog
import pycwb.cli.post_process as post_process
import pycwb.cli.gwosc as gwosc

def main():
    parser = argparse.ArgumentParser(prog='pycwb')
    subparsers = parser.add_subparsers(help='commands')

    # Create subcommand
    create_parser = subparsers.add_parser('server', help='Run a simple server to show the results')
    server.init_parser(create_parser)
    create_parser.set_defaults(func=server.command)

    # Run subcommand
    run_parser = subparsers.add_parser('run', help='Run search')
    run.init_parser(run_parser)
    run_parser.set_defaults(func=run.command)

    flow_parser = subparsers.add_parser('flow', help='Run search')
    flow.init_parser(flow_parser)
    flow_parser.set_defaults(func=flow.command)

    batch_parser = subparsers.add_parser('batch-setup', help='Setup batch run')
    batch_setup.init_parser(batch_parser)
    batch_parser.set_defaults(func=batch_setup.command)

    batch_runner_parser = subparsers.add_parser('batch-runner', help='Runner for batch run')
    batch_runner.init_parser(batch_runner_parser)
    batch_runner_parser.set_defaults(func=batch_runner.command)

    xtalk_parser = subparsers.add_parser('xtalk', help='Convert xtalk file')
    xtalk.init_parser(xtalk_parser)
    xtalk_parser.set_defaults(func=xtalk.command)

    merge_catalog_parser = subparsers.add_parser('merge-catalog', help='Merge catalog files')
    merge_catalog.init_parser(merge_catalog_parser)
    merge_catalog_parser.set_defaults(func=merge_catalog.command)

    post_process_parser = subparsers.add_parser('post-process', help='Post process the results')
    post_process.init_parser(post_process_parser)
    post_process_parser.set_defaults(func=post_process.command)

    #gwosc subcommand
    gwosc_parser = subparsers.add_parser('gwosc', help='Download files to run a pycwb analysis of a GW event of your choice')
    gwosc.init_parser(gwosc_parser)
    gwosc_parser.set_defaults(func=gwosc.command)
        
    args = parser.parse_args()
    if hasattr(args, 'func'):
        args.func(args)
    else:
        parser.print_help()

    # if no command is given, print help
    if len(vars(args)) == 0:
        parser.print_help()


if __name__ == '__main__':
    main()