#!/usr/bin/env python

import cinemasci
import cinemasci.server
import argparse
import sys

# ----------------------------------------------------------------------------
#
# parse command line options
#
# ----------------------------------------------------------------------------

def server(args):
    if args.verbose:
        print(args.viewer)
        print(args.rundir)
        print(args.databases)
        print(args.port)
        print(args.assetname)
        print(args.verbose)
    cinemasci.server.run_cinema_server( args.viewer, args.rundir, args.databases, args.port, args.assetname, args.verbose)

def browse(args):
    try:
        import webbrowser
    except ImportError or ModuleNotFoundError:
        print("This can only be run if the python module webbrowser is available")
        sys.exit(1)

    if args.verbose:
        print(args.viewer)
        print(args.rundir)
        print(args.databases)
        print(args.port)
        print(args.assetname)
        print(args.verbose)

    if cinemasci.server.verify_cinema_databases( args.rundir, args.databases ):
        webbrowser.open("http://localhost:{}".format(args.port), new=2)
        cinemasci.server.run_cinema_server( args.viewer, args.rundir, args.databases, args.port, args.assetname, args.verbose, silent=True)

    else:
        sys.exit(1)

helptext = "\n\
\n\
examples: \n\
\n\
    cinema server -d first.cdb second.cdb\n\
    cinema server --databases first.cdb second.cdb\n\
        both commands run a cinema server that uses the \'view\' viewer to view databases\n\
  \n\
    cinema server --viewer explorer --databases first.cdb second.cdb --port XXXX\n\
        run a cinema server that uses the \'explorer\' viewer to view databases over port XXXX\n\
  \n\
" 
 
# normal option parsing 
parent_parser = argparse.ArgumentParser( description="cinema: transform input data to cinema database", 
                                  epilog=helptext, 
                                  formatter_class=argparse.RawDescriptionHelpFormatter ) 


subparsers = parent_parser.add_subparsers()

# subcommand
parser_server = subparsers.add_parser('server', 
                                    add_help=False,
                                    parents=[parent_parser],
                                    help="run a cinema server to view databases" )
parser_server.add_argument("--assetname", default=None, help="asset name to use (optional)") 
parser_server.add_argument("-d", "--databases", required=True, nargs="+", default=None, help="database to view (required)") 
parser_server.add_argument("--port", type=int, default=8000, help="port to use (optional)") 
parser_server.add_argument("--rundir", default=".", help="directory in which to run the server") 
parser_server.add_argument("--viewer", 
                            default="view", 
                            type=str, 
                            choices={"explorer", "view"}, 
                            help="directory in which to run the server") 
parser_server.add_argument("--verbose", action="store_true", help="directory in which to run the server") 
parser_server.set_defaults(func=server)

# subcommand
parser_browse = subparsers.add_parser('browse', 
                                    add_help=False,
                                    parents=[parent_parser],
                                    help="run a cinema server and browser to view databases" )
parser_browse.add_argument("--assetname", default=None, help="asset name to use (optional)") 
parser_browse.add_argument("-d", "--databases", required=True, nargs="+", default=None, help="database to view (required)") 
parser_browse.add_argument("--port", type=int, default=8000, help="port to use (optional)") 
parser_browse.add_argument("--rundir", default=".", help="directory in which to run the server") 
parser_browse.add_argument("--viewer", 
                            default="view", 
                            type=str, 
                            choices={"explorer", "view"}, 
                            help="directory in which to run the server") 
parser_browse.add_argument("--verbose", action="store_true", help="directory in which to run the server") 
parser_browse.set_defaults(func=browse)

args = parent_parser.parse_args()
args.func(args)
