#!/usr/bin/env python
import     argparse,\
   subprocess,\
   ntpath,\
   platform,\
   os,\
   sys

def __is_windows():
    return platform.system() == 'Windows'

def __is_cygwin():
    return 'CYGWIN' in platform.system()

def __convert_path(path):
    if (path == ''):
        path = '.'
    if (__is_cygwin()):
        result = subprocess.check_output(['cygpath', '--path', path, '-w', '-a'])
        return result.replace('\\','/').strip()
    return path

def __classpath(elements=[]):
    classpath_separator = ';' if __is_windows() or __is_cygwin() else ':'
    classpath = classpath_separator.join(elements)
    if (__is_windows()):
        return classpath
    return "'%s'" % classpath

def __liquigraph_exec(arguments):
   path,file = ntpath.split(args.changelog)
   path = __convert_path(path)
   main_class = 'org.liquigraph.cli.LiquigraphCli'
   main_args =  []
   main_args.append('-c')
   main_args.append(file)
   
   if arguments.graph_db_uri is not None:
      main_args.append('-g')
      main_args.append(arguments.graph_db_uri)
   if arguments.username is not None:
      main_args.append('-u')
      main_args.append(arguments.username)
   if arguments.password is not None:
      main_args.append('-p')
      main_args.append(arguments.password)
   if arguments.dry_run_output_directory is not None:
      main_args.append('-d')
      main_args.append(__convert_path(arguments.dry_run_output_directory))
   result = ['java', '-classpath', __classpath(['liquigraph.jar', path]), main_class]
   return result + main_args

parser = argparse.ArgumentParser(description='Liquigraph CLI', add_help=False)
parser.add_argument('-h','--help', action='store_true')
parser.add_argument('-c','--changelog')
parser.add_argument('-g','--graph-db-uri', dest='graph_db_uri')
parser.add_argument('-u','--username')
parser.add_argument('-p','--password')
parser.add_argument('-d','--dry-run-output-directory', dest='dry_run_output_directory')
args = parser.parse_args()

if args.help:
   os.system('java -jar liquigraph.jar -h')
else:
   command = ' '.join(__liquigraph_exec(args))
   os.system(command)
   