#!/usr/bin/python

import sys
import json
import yaml
import argparse
import traceback

from crazy_complete import application
from crazy_complete.utils import print_err

# "Import" argparse definitions for:
#   crazy-complete --input-type=python bash "$(which crazy-complete)"
p = application._crazy_complete_argument_parser

if __name__ == '__main__':
    app = application.Application()

    try:
        app.parse_args(sys.argv[1:])
    except argparse.ArgumentError as e:
        print_err('Command line error:', e)
        sys.exit(2)

    try:
        app.run()
    except (application.CrazyError,
            FileNotFoundError,
            yaml.scanner.ScannerError,
            yaml.parser.ParserError,
            json.decoder.JSONDecodeError) as e:
        print_err('Error:', e)
        if app.options.debug:
            traceback.print_exc()
        else:
            print_err('Pass --debug to see full stack trace')
        sys.exit(1)
    except Exception:
        traceback.print_exc()
        print_err()
        print_err('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
        print_err('!!!                                                      !!!')
        print_err('!!!   THIS IS PROBABLY AN ERROR IN THE PROGRAM!          !!!')
        print_err("!!!   Don't hesitate to open an issue on GitHub:         !!!")
        print_err('!!!   https://github.com/crazy-complete/crazy-complete   !!!')
        print_err('!!!                                                      !!!')
        print_err('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
        print_err()
        sys.exit(3)
