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

#include <avm/hui/legacy.h>

void print_usage(void) {
	fprintf(stderr,
		"Usage: hui-ctrl [OPTION...] event[=val]...\n"
		"\n"
		"Options:\n"
		" -h          print this help message\n"
		" -l          list all known events\n"
	);
}

void print_all_events(void) {
	int i;
	const struct avm_hui_event_info *info;

	foreach_avm_hui_event(i, info) {
		printf("%s\n", info->name);
	}
}

int main(int argc, char** argv) {
	int i, ret;

	if (argc < 2 || (argc == 2 && strcmp(argv[1], "-h") == 0)) {
		print_usage();
		return 0;
	}

	if (argc == 2 && strcmp(argv[1], "-l") == 0) {
		print_all_events();
		return 0;
	}

	ret = led_event_init(LED_EVENT_VERSION);
	if (ret) {
		fprintf(stderr, "Could not initialize libhui: %s\n", strerror(errno));
		return -1;
	}

	for (i = 1; i < argc; i++) {
		const struct avm_hui_event_info *info;
		char *arg = argv[i];
		char *sep;
		char *event_name;
		int event_value = 1;
		int ret;

		sep = strchr(arg, '=');

		if (sep) {
			char *end;

			// Set the = to \0 to terminate the name and advance
			*sep++ = '\0';
			event_name = arg;

			event_value = strtol(sep, &end, 10);

			if (*end != '\0') {
				fprintf(stderr, "Invalid event parameter: %s\n", sep);
				return -1;
			}
		}
		else {
			event_name = arg;
		}

		info = avm_hui_get_info_by_name(event_name);

		if (!info) {
			fprintf(stderr, "Unknown event %s\n", event_name);
			return -1;
		}

		ret = led_event_set(info->id, event_value);
		if (ret) {
			fprintf(stderr, "Could not set event %s: %s\n", event_name, strerror(errno));
			return 1;
		}
	}

	led_event_deinit();

	return 0;
}