#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import code
import argparse

import oerplib

parser = argparse.ArgumentParser()
# Positional arguments
parser.add_argument("action", nargs='?', default='shell')
# Optional arguments
parser.add_argument(
    "-n", "--session",
    help="pre-configured session name")
parser.add_argument(
    "-f", "--file", default='~/.oerplibrc',
    help="configuration file to use")
parser.add_argument(
    "-s", "--server",
    help="server hostname")
parser.add_argument(
    "-u", "--user",
    help="user login")
parser.add_argument(
    "-w", "--password",
    help="user password")
parser.add_argument(
    "-d", "--database",
    help="database name")
args = parser.parse_args()


def action_shell(oerp):
    """Open an interactive Python shell."""
    title = '[{user}@{server}:{database}]'.format(
        user=oerp.user.login, server=oerp.server, database=oerp.database)
    local = {'oerplib': oerplib, 'oerp': oerp}
    code.interact(title, local=local)

actions = {
    'shell': action_shell,
}


def main():
    if args.session:
        if args.session not in oerplib.list(args.file):
            print("Error: no '{0}' configuration in '{1}' file".format(
                args.session, args.file))
            return
        oerp = oerplib.load(args.session, args.file)
    elif args.user and args.server and args.password and args.database:
        oerp = oerplib.OERP(args.server)
        oerp.login(args.user, args.password, args.database)
    else:
        print("Error: please supply a session name (-n option) or "
              "sufficient connection information (-s, -u, -w and -d).")
        return
    if args.action in actions:
        actions[args.action](oerp)
    else:
        print("Unknown action: '{0}'".format(args.action))

if __name__ == '__main__':
    main()

# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
