import { DateTime } from "luxon";

export default function(eleventyConfig) {
	// Return the keys used in an object
	eleventyConfig.addFilter("getKeys", target => {
		return Object.keys(target);
	});

	/* */
	eleventyConfig.addFilter("getTagline", tag => {
		let tagline;
		switch (tag) {
			case "animals and the outdoors":
				tagline = "touchin' grass";
				break;
			case "art and crafts":
				tagline = "makin' stuff";
				break;
			case "beauty and health":
				tagline = "feelin' good";
				break;
			case "business":
				tagline = "makin' money";
				break;
			case "food and drink":
				tagline = "good eatin'";
				break;
			case "history and science":
				tagline = "book learnin'"
				break;
			case "miscellany and more":
				tagline = "leaves me guessin'";
				break;
			case "repair and diy":
				tagline = "fixin' stuff";
				break;
			case "interpersonal and life":
				tagline = "better livin'";
				break;
			case "technology":
				tagline = "computer touchin'";
				break;
			case "writing editing and literature":
				tagline = "wordsmithin'";
				break;
		};
		return tagline;
	});

	/* For <time> elements */
	eleventyConfig.addFilter("htmlDateString", (dateObj) => {
		return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat('yyyy-LL-dd');
	});

	/* Human-readable dates */
	eleventyConfig.addFilter("readableDate", (dateObj, zone) => {
		return DateTime.fromJSDate(dateObj, { zone: zone || "utc" })
			.toLocaleString(DateTime.DATE_FULL);
	});

	/* Filter out structural tags */
	eleventyConfig.addFilter("removeCoreTags", (tags) => {
		return tags.filter(tag => ["all"].indexOf(tag) === -1);
	});

	/* What it says on the tin */
	eleventyConfig.addFilter("sortAlphabetically", strings =>
		(strings || []).sort((b, a) => b.localeCompare(a))
	);
};
