#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Generates a JSON schema based on samples
"""

from __future__ import absolute_import, print_function

import json
from skinfer import schema_inferer


def write_schema(schema):
    print(json.dumps(schema, indent=4))


def try_infer_schema(args):
    samples = schema_inferer.load_samples(args.samples, args.jsonlines)
    return schema_inferer.generate_and_merge_schemas(samples)


def run(args):
    try:
        schema = try_infer_schema(args)
        write_schema(schema)
    except ValueError as e:
        if 'Extra data:' in e.message:
            args.jsonlines = True
            schema = try_infer_schema(args)
            write_schema(schema)
        else:
            raise


if '__main__' == __name__:
    import argparse
    parser = argparse.ArgumentParser(description=__doc__)

    parser.add_argument('--jsonlines', action='store_true',
                        help='Assume samples are in JSON lines format')
    parser.add_argument('samples', nargs='+', metavar='SAMPLE',
                        help='JSON data sample files')

    args = parser.parse_args()
    run(args)
