const getCustomInitialProps = async ({
	agility,
	channelName,
	languageCode,
}:any) => {
	// set up api
	const api = agility;



	// get sitemap...
	let sitemap = await api.getSitemapFlat({
		channelName: channelName,
		languageCode,
	});

	// get posts...
	let rawPosts = await api.getContentList({
		referenceName: "blogposts",
		languageCode,
		take: 50,
		contentLinkDepth: 2,
		depth: 2
	});

	// resolve dynamic urls
	const dynamicUrls: [] = resolvePostUrls(sitemap, rawPosts.items);
	const posts: [] = rawPosts.items.map((post: any) => {

		const productJSON = post.fields.product
		const product = JSON.parse(productJSON)

		const productName = product.name
		const productImageSrc = product.imageUrl

		// date
		const date = new Date(post.fields.date).toLocaleDateString();

		// url
		const url = dynamicUrls[post.contentID] || "#";

		// post image src
		let imageSrc = post.fields.image?.url || null

		// post image alt
		let imageAlt = post.fields.image?.label || null;

		return {
			contentID: post.contentID,
			title: post.fields.title,
			date,
			url,
			productName,
			productImageSrc,
			imageSrc,
			imageAlt,
		};
	});

	//sort newest first...
	posts.sort((a: any, b: any) => {
		return b.date.localeCompare(a.date);
	})

	return {
		posts,
	};


};

// function to resole post urls
const resolvePostUrls = function (sitemap: any, posts: any): any {
	let dynamicUrls: any = {};
	posts.forEach((post: any) => {
		Object.keys(sitemap).forEach((path) => {
			if (sitemap[path].contentID === post.contentID) {
				dynamicUrls[post.contentID] = path;
			}
		});
	});
	return dynamicUrls;
};

export default { getCustomInitialProps }