/* Compile with:
 * gcc -Wall -o plugin plugin.c -llrdf
 */


#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <lrdf.h>

#define MAXLEN 1024

static int
rdf_filter(const struct dirent * de) {

	if (de->d_type != DT_REG)
		return 0;

	if (de->d_name[0] == '.')
		return 0;

	return (((strlen(de->d_name) >= 4) && (strcmp(de->d_name + strlen(de->d_name) - 3, ".n3") == 0)) ||
		((strlen(de->d_name) >= 5) && (strcmp(de->d_name + strlen(de->d_name) - 4, ".rdf") == 0)) ||
		((strlen(de->d_name) >= 6) && (strcmp(de->d_name + strlen(de->d_name) - 5, ".rdfs") == 0)));
}

void
parse_lrdf_data(void) {


	char * lrdf_path = NULL;
	char rdf_path[MAXLEN];
	char fileuri[MAXLEN];
	int i, j = 0;
	struct dirent ** de;
	int n;

	if (!(lrdf_path = getenv("LADSPA_RDF_PATH"))) {
                lrdf_path = strdup("/usr/local/share/ladspa/rdf:/usr/share/ladspa/rdf");
        }

	printf("lrdf_path = %s\n", lrdf_path);


	strcat(lrdf_path, ":");
	for (i = 0; lrdf_path[i] != '\0'; i++) {
		if (lrdf_path[i] == ':') {
			rdf_path[j] = '\0';
			j = 0;
			printf("rdf_path = %s\n", rdf_path);

			n = scandir(rdf_path, &de, rdf_filter, alphasort);
			if (n >= 0) {
				int c;
				
				for (c = 0; c < n; ++c) {
					snprintf(fileuri, MAXLEN-1, "file://%s/%s", rdf_path, de[c]->d_name);
					if (lrdf_read_file(fileuri)) {
						printf("warning: could not parse RDF file: %s\n", fileuri);
					} else
						printf("parsed RDF: %s\n", fileuri);
				}
			}
		} else {
			rdf_path[j++] = lrdf_path[i];
		}
	}
}

void
list_scale_info(int id, int port) {

	int i;
	lrdf_defaults * defs;

	printf("\nPlugin ID: %d, port %d\n", id, port);

	defs = lrdf_get_scale_values(id, port);
	for (i = 0; defs && i < defs->count; i++) {
		printf("%f = '%s'\n", defs->items[i].value, defs->items[i].label);
	}
	lrdf_free_setting_values(defs);
}

int main(int argc, char ** argv) {

	lrdf_init();

	parse_lrdf_data();

	/* Reverb Types of TAP Reverberator */
	list_scale_info(2142, 8);

	/* Sidechain filter chooser of TAP DeEsser */
	/* Should return {"Highpass", "Bandpass"} !!! */
	list_scale_info(2147, 3);

	/* Monitor chooser of TAP DeEsser */
	/* Should return {"Audio", "Sidechain"} !!! */
	list_scale_info(2147, 4);

	/* SWH Diode processor */
	/* Should return {"none", "half wave", "full wave"} !!! */
	list_scale_info(1185, 0);

	lrdf_cleanup();

	return 0;
}
