#!/usr/bin/env python -u

import sys
import logging
import os
from os import path


def init_user_dir():
    os.environ['PRUDENTIA_USER_DIR'] = user_dir = path.join(path.expanduser('~'), 'prudentia')
    if not path.exists(user_dir):
        os.makedirs(user_dir)
    return user_dir


def init_logging(user_dir):
    logging.basicConfig(
        filename=path.join(user_dir, 'cli.log'),
        format='%(asctime)s.%(msecs).03d [%(name)s] %(levelname)s: %(message)s',
        datefmt='%d-%m-%Y %H:%M:%S',
        level=logging.WARNING
    )


def init_readline(user_dir):
    import readline
    import atexit

    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")

    history_path = path.join(user_dir, 'history')

    def save_history(p=history_path):
        import readline
        readline.write_history_file(p)

    try:
        readline.read_history_file(history_path)
    except:
        pass

    atexit.register(save_history)


if __name__ == "__main__":
    ud = init_user_dir()
    init_logging(ud)
    init_readline(ud)

    from prudentia.cli import CLI

    cli = CLI()

    exit_error = 0
    if len(sys.argv) > 1:
        one_cmd_provisioned = cli.do_use(sys.argv[1], *sys.argv[2:])
        exit_error = 0 if one_cmd_provisioned else 1
    else:
        cli.cmdloop()

    sys.exit(exit_error)
