""" Command line tools for the API server """
from argparse import ArgumentParser

import dpath
from humanfriendly import parse_timespan


def setup():
    from apiserver.database import db

    db.initialize()


def gen_token(args):
    from apiserver.bll.auth import AuthBLL

    resp = AuthBLL.get_token_for_user(
        args.user_id, args.company_id, int(parse_timespan(args.expiration))
    )
    print("Token:\n%s" % resp.token)


def safe_get(obj, glob, default=None, separator="/"):
    try:
        return dpath.get(obj, glob, separator=separator)
    except KeyError:
        return default


if __name__ == "__main__":
    top_parser = ArgumentParser(__doc__)

    subparsers = top_parser.add_subparsers(title="Sections")

    token = subparsers.add_parser("token")
    token_commands = token.add_subparsers(title="Commands")
    token_create = token_commands.add_parser(
        "generate", description="Generate a new token"
    )
    token_create.add_argument("--user-id", "-u", help="User ID", required=True)
    token_create.add_argument("--company-id", "-c", help="Company ID", required=True)
    token_create.add_argument(
        "--expiration",
        "-exp",
        help="Token expiration (time span, shorthand suffixes are supported, default 1m)",
        default=parse_timespan("1m"),
    )
    token_create.set_defaults(_func=gen_token)

    args = top_parser.parse_args()
    if args._func:
        setup()
        args._func(args)