"""Console script for peek."""
import argparse
import sys

from peek import __version__
from peek.config import config_location
from peek.peekapp import PeekApp


def main():
    """Console script for peek."""
    parser = argparse.ArgumentParser()

    parser.add_argument('input', nargs='*', help='script files')

    parser.add_argument('--config', default=config_location() + 'peekrc', help='Configuration file to load')

    parser.add_argument('-e', '--extra-config-option', action='append', help='Extra configuration option to override')

    parser.add_argument('--name', help='A friendly name for the connection')
    parser.add_argument('--hosts', default=argparse.SUPPRESS, help='ES hosts to connect to (default localhost:9200)')
    parser.add_argument('--cloud_id', help='Elastic Cloud ID')
    parser.add_argument('--username', help='Username')
    parser.add_argument('--password', help='Password')
    parser.add_argument('--api_key', help='API key of format id:key')
    parser.add_argument('--token', help='Token for authentication')
    parser.add_argument(
        '--use_ssl', action='store_true', default=argparse.SUPPRESS, help='Enable TLS for connecting to ES'
    )
    parser.add_argument(
        '--verify_certs', action='store_true', default=argparse.SUPPRESS, help='Verify server certificate'
    )
    parser.add_argument('--assert_hostname', default=argparse.SUPPRESS, help='Verify for the given hostname')
    parser.add_argument('--assert_fingerprint', default=argparse.SUPPRESS, help='Verify for the given fingerprint')
    parser.add_argument('--ca_certs', help='Location of CA certificates')
    parser.add_argument('--client_cert', help='Location of client certificate')
    parser.add_argument('--client_key', help='Location of client private key')
    parser.add_argument(
        '--force_prompt', action='store_true', default=argparse.SUPPRESS, help='Force prompting for password'
    )
    parser.add_argument(
        '--no_prompt', action='store_true', default=argparse.SUPPRESS, help='Do not prompt for password'
    )
    parser.add_argument('-z', '--zero_connection', action='store_true', help='Start the session with no connection')

    parser.add_argument('-V', '--version', action='version', version=__version__)

    ns = parser.parse_args()

    isatty = sys.stdin.isatty()
    batch_mode = (not isatty) or bool(ns.input)

    peek = PeekApp(
        batch_mode=batch_mode,
        config_file=ns.config,
        extra_config_options=ns.extra_config_option,
        cli_ns=ns,
    )
    if not batch_mode:
        peek.run()
    else:
        if ns.input:
            for f in ns.input:
                with open(f) as ins:
                    peek.process_input(ins.read())
        else:
            stdin_read = sys.stdin.read()
            peek.process_input(stdin_read)

    return 0


if __name__ == "__main__":
    sys.exit(main())  # pragma: no cover
