
import sys
import os
import _paths

OUTPUT_FORMATS = "pdf png dot".split()
PDF_FORMAT, PNG_FORMAT, DOT_FORMAT = OUTPUT_FORMATS


def handle_options():
    import argparse
    parser = argparse.ArgumentParser(description="Opens the TFPG Viewer")

    parser.add_argument("--tfpg-file", "-t",
                        dest="tfpg_fname",
                        default=None,
                        type=str,
                        help="The input TFPG file name")

    parser.add_argument("--output-file", "-o",
                        dest="out_fname",
                        default=None,
                        type=str,
                        help="The name of the output file used to dump the TFPG")

    parser.add_argument("--output-format", "-f",
                        dest="output_format",
                        choices=OUTPUT_FORMATS,
                        default=PDF_FORMAT,
                        help="Output format (default: %(default)s)")

    args = parser.parse_args()

    if args.tfpg_fname is not None and not os.path.isfile(args.tfpg_fname):
        parser.error("File not found: %s" % args.tfpg_fname)

    return args


def main(tfpg_fname, out_fname, output_format):
    from tfpg_viewer import tfpgv
    tfpgv.run(tfpg_fname, out_fname, output_format)
    return


if __name__ == "__main__":
    _paths.setup_path()
    args = handle_options()
    main(args.tfpg_fname, args.out_fname, args.output_format)
