#!python
import os
import sys
from os.path import expanduser
import optparse

import acmd

USAGE = """acmd [options] <tool> <args>
    Run 'acmd help' for list of available tools"""

parser = optparse.OptionParser(USAGE)
parser.add_option("-s", "--server", dest="server",
                  help="server name", metavar="str")
parser.add_option("-v", "--verbose",
                  action="store_const", const=True, dest="verbose",
                  help="verbose logging useful for debugging")


def split_argv(argv):
    """ Split argument list into system arguments before the tool
    and tool arguments afterwards.
    ['foo', 'bar', 'inspect', 'bink', 'bonk']
        => (['foo', 'bar', 'inspect'], ['inspect', 'bink', 'bonk'])"""
    for i, arg in enumerate(argv):
        if acmd.get_tool(arg) is not None:
            return argv[0:i + 1], argv[i:]
    return argv, []


def get_init(path):
    if path.endswith('__init__.py'):
        return path
    elif path.endswith('/'):
        return path + "__init__.py"
    else:
        return path + "/__init__.py"


def load_projects(projects):
    """ Expecting dict of {<prefix>: <path>}
    """
    ret = {}
    for name, path in projects.items():
        path = expanduser(path)
        sys.path.insert(1, path)
        init_file = get_init(path)
        acmd.tool.set_current_project(name)
        acmd.tool.import_tools(init_file)
        ret[name] = path


if __name__ == '__main__':

    home = expanduser("~")
    rcfilename = "{home}/.acmd.rc".format(home=home)
    if not os.path.isfile(rcfilename):
        acmd.setup_rcfile(rcfilename)
    cfg = acmd.read_config(rcfilename)

    sysargs, cmdargs = split_argv(sys.argv)
    (options, args) = parser.parse_args(sysargs)
    if len(args) == 1:
        parser.print_help()
        sys.exit(0)
    else:
        tool_name, args = args[1], []
    acmd.init_log(options.verbose)
    server = cfg.get_server(options.server)
    acmd.log("Using server {}".format(server))
    cmd = acmd.get_tool(tool_name)
    if cmd is None:
        sys.stderr.write("error: tool '{cmd}' not found.\n".format(cmd=tool_name))
        status = 1
    else:
        status = cmd.execute(server, cmdargs)
    sys.exit(status)
