#!/usr/bin/env python

import argparse
import sys

from parquet2hive_modules import parquet2hivelib as lib

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Parquet dataset importer for Hive",
                                     formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    parser.add_argument('dataset', nargs=1, metavar=('dataset',),
                        help="S3 path to Parquet dataset with the following layout s3://BUCKET/DATASET/vVERSION/DIM=VALUE/.../DIM=VALUE/FILE")

    parser.add_argument('--all', action='store_true',
                        help='Process all datasets at this s3 location')

    parser.add_argument('--success-only', '-so', action='store_true',
                        help='Only process partitions that contain a _SUCCESS file')

    parser.add_argument('--dataset-version', '-dv', default=None,
                        help="Specify version of the dataset to use with format vyyyymmdd, e.g. v20160514. Cannot be used with --use-last-versions")

    parser.add_argument('--use-last-versions', '-ulv', nargs='?', const=1, type=int, default=None,
                        help='Load only the most recent version of the dataset, cannot be used with --dataset-version. Defaults to 1')

    parser.add_argument('--alias', type=str, default=None,
                        help='Use an alternate name for this dataset')

    parser.add_argument('--exclude-regex', type=str, default=None, nargs='*',
                        help='A regex pattern which causes any objects that match it to be ignored')

    parser.add_argument('--sql', action='store_true',
                        help='Whether tool should output hive-cli statements or just the raw SQL')

    args = parser.parse_args()

    if args.all and (args.dataset_version is not None or args.alias is not None):
        sys.stderr.write('Cannot use dataset-version or alias options with --all')
        sys.exit()

    if args.use_last_versions and args.dataset_version is not None:
        sys.stderr.write('Cannot use both --dataset-version and --use-last-versions')
        sys.exit()

    if args.all:
        try:
            print lib.load_prefix(args.dataset[0], args.success_only, args.use_last_versions, args.exclude_regex, args.sql)
        except Exception as e:
            print "Failed to load prefix, {}".format(str(e))
            exit(-1)
    else:
        try:
            print lib.get_bash_cmd(args.dataset[0], args.success_only, args.use_last_versions, args.dataset_version, args.alias, args.exclude_regex, args.sql)
        except Exception as e:
            print "Failure to parse dataset, {}".format(str(e))
            exit(-1)
