#include <stdio.h>
#include <string.h>

/* user defined headers */
#include <common-cmds.h>

#include <kvm/util.h>
#include <kvm/kvm-cmd.h>
#include <kvm/kvm-help.h>


const char kvm_usage_string[] =
	"kvm [--version] [--help] COMMAND [ARGS]";

const char kvm_more_info_string[] =
	"See 'kvm help COMMAND' for more information on a specific command.";


static void list_common_cmds_help(void)
{
	unsigned int i, longest = 0;

	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
		if (longest < strlen(common_cmds[i].name))
			longest = strlen(common_cmds[i].name);
	}

	puts(" The most commonly used kvm commands are:");
	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
		printf("   %-*s   ", longest, common_cmds[i].name);
		puts(common_cmds[i].help);
	}
}

static void kvm_help(void)
{
	printf("\n usage: %s\n\n", kvm_usage_string);
	list_common_cmds_help();
	printf("\n %s\n\n", kvm_more_info_string);
}


static void help_cmd(const char *cmd)
{
	struct cmd_struct *p;
	p = kvm_get_command(kvm_commands, cmd);
	if (!p)
		kvm_help();
	else if (p->help)
		p->help();
}

int kvm_cmd_help(int argc, const char **argv, const char *prefix)
{
	if (!argv || !*argv) {
		kvm_help();
		return 0;
	}
	help_cmd(argv[0]);
	return 0;
}
