#include "test-tool.h"
#include "setup.h"
#include "userdiff.h"
#include "config.h"

static int driver_cb(struct userdiff_driver *driver,
		     enum userdiff_driver_type type, void *priv)
{
	enum userdiff_driver_type *want_type = priv;
	if (type & *want_type && driver->funcname.pattern)
		puts(driver->name);
	return 0;
}

static int cmd__userdiff_config(const char *var, const char *value,
				const struct config_context *ctx UNUSED,
				void *cb UNUSED)
{
	if (userdiff_config(var, value) < 0)
		return -1;
	return 0;
}

int cmd__userdiff(int argc, const char **argv)
{
	enum userdiff_driver_type want = 0;
	if (argc != 2)
		return 1;

	if (!strcmp(argv[1], "list-drivers"))
		want = (USERDIFF_DRIVER_TYPE_BUILTIN |
			USERDIFF_DRIVER_TYPE_CUSTOM);
	else if (!strcmp(argv[1], "list-builtin-drivers"))
		want = USERDIFF_DRIVER_TYPE_BUILTIN;
	else if (!strcmp(argv[1], "list-custom-drivers"))
		want = USERDIFF_DRIVER_TYPE_CUSTOM;
	else
		return error("unknown argument %s", argv[1]);

	if (want & USERDIFF_DRIVER_TYPE_CUSTOM) {
		setup_git_directory();
		git_config(cmd__userdiff_config, NULL);
	}

	for_each_userdiff_driver(driver_cb, &want);

	return 0;
}
