#!/usr/bin/python3 -sP

# Resalloc administrating tool.
# Copyright (C) 2017 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import sys
import argparse

from resallocserver.maint import Maintainer

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title="actions", dest='subparser')
subparsers.required = True

p_list = subparsers.add_parser(
        "resource-list",
        help="List available resources")
p_list.add_argument(
        "--up", dest='up', action='store_true',
        help="List only ready-to-take resources")

parser_resource_info = subparsers.add_parser(
    "resource-info",
    help="Print detailed information about a resource")
parser_resource_info.add_argument(
        "resource",
        help="The resource IDs")

parser_resource_delete = subparsers.add_parser(
        "resource-delete",
        help="Delete resource")
parser_resource_delete.add_argument(
        "resource",
        help="The resource IDs",
        nargs='*')
parser_resource_delete_group =\
        parser_resource_delete.add_mutually_exclusive_group()
parser_resource_delete_group.add_argument(
        "--all",
        help="Delete all resources",
        action="store_true")
parser_resource_delete_group.add_argument(
        "--unused",
        help="Delete all resources without any assigned ticket",
        action="store_true")

parser_resource_logs = subparsers.add_parser(
    "resource-logs",
    help="Print and follow logs for a resource")
parser_resource_logs.add_argument(
        "resource",
        help="The resource IDs",
        nargs='+')

p_t_list = subparsers.add_parser(
        "ticket-list",
        help="List not-yet-closed tickets")

foreach = subparsers.add_parser(
    "foreach-resource",
    help="Execute command for each resource",
)
foreach.add_argument(
    "--command",
    default="echo {name}",
    help=(
        "Shell command to execute.  This accepts variables like "
        "{state}, {data_utf8}, {name}, etc."),
)


def main():
    try:
        args = parser.parse_args()
        maint = Maintainer()

        if 'resource-list' in args.subparser:
            maint.resource_list(up=args.up)

        elif 'resource-info' in args.subparser:
            maint.resource_info(args.resource)

        elif 'resource-delete' in args.subparser:
            maint.resource_delete(args)

        elif 'resource-logs' in args.subparser:
            maint.resource_logs(args.resource)

        elif 'ticket-list' in args.subparser:
            maint.ticket_list()

        elif 'foreach-resource' in args.subparser:
            maint.foreach_resource(args)

    except KeyboardInterrupt:
        sys.stderr.write("\nInterrupted by user.")
        sys.exit(1)

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