#!/usr/bin/env python
import argparse
import sys

import ipmi


def main(args):
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    console_parser = subparsers.add_parser("console")
    console_parser.set_defaults(subcommand="console")
    console_parser.add_argument(
        '-d',
        action='store_true',
        dest='deactivate',
        default=False,
        help='deactivate sol'
    )

    pxe_parser = subparsers.add_parser("pxe")
    pxe_parser.set_defaults(subcommand="pxe")
    pxe_parser.add_argument(
        "--cycle",
        dest="power_cycle",
        action="store_true",
        help="cycle power after pxeing"
    )

    uid_parser = subparsers.add_parser("uid")
    uid_parser.set_defaults(subcommand="uid")

    lan_parser = subparsers.add_parser("lan")
    lan_parser.set_defaults(subcommand="lan")

    lan_parser = subparsers.add_parser("datamac")
    lan_parser.set_defaults(subcommand="datamac")

    lan_parser = subparsers.add_parser("fru")
    lan_parser.set_defaults(subcommand="fru")

    uid_parser.add_argument(
        "-t",
        "--time",
        metavar="SECONDS",
        dest="uid_time",
        type=int,
        default=-1,
        help="turn the UID light on; -1 for indefinite; 0 for off"
    )

    power_parser = subparsers.add_parser("power")
    power_parser.set_defaults(subcommand="power")

    power_parser_states = power_parser.add_mutually_exclusive_group()
    power_parser_states.add_argument(
        "--cycle",
        dest="power_cycle",
        action="store_true",
        help="cycle power"
    )
    power_parser_states.add_argument(
        "--on",
        dest="power_on",
        action="store_true",
        help="turn power on"
    )
    power_parser_states.add_argument(
        "--off",
        dest="power_off",
        action="store_true",
        help="turn power off"
    )

    parser.add_argument('hostname', help='hostname to run commands against')
    parser.add_argument(
        '-c',
        dest='console',
        action='store_true',
        default=False,
        help='Run a console after your command'
    )

    args = parser.parse_args()

    if args.subcommand == "console":
        ipmi.ipmi_console(args.hostname, args.deactivate)
    elif args.subcommand == "datamac":
        ipmi.ipmi_datamac(args.hostname)
    elif args.subcommand == "lan":
        ipmi.ipmi_lan(args.hostname)
    elif args.subcommand == "fru":
        ipmi.ipmi_fru(args.hostname)
    elif args.subcommand == "uid":
        ipmi.ipmi_uid(args.hostname, args.uid_time)
    elif args.subcommand == "pxe":
        ipmi.set_pxe_boot(args.hostname)
        if args.power_cycle:
            ipmi.ipmi_power(args.hostname, "--cycle")
    elif args.subcommand == "power":
        state = "--stat"
        if args.power_on:
            state = "--on"
        elif args.power_off:
            state = "--off"
        elif args.power_cycle:
            state = "--cycle"
        ipmi.ipmi_power(args.hostname, state)

    if args.console is True:
        ipmi.run_ipmi_console(args.hostname)

    return 0

if __name__ == "__main__":
    sys.exit(main(sys.argv))
