import { render } from 'vike/abort'; /* eslint-disable-line import/extensions */
import { fetchScenesById } from '#/src/scenes.js';
import { getRandomCampaigns } from '#/src/campaigns.js';

function getTitle(scene) {
	if (scene.title) {
		return scene.title;
	}

	if (scene.actors.length > 0) {
		return `Scene with ${scene.actors.map((actor) => actor.name).join(', ')}`;
	}

	return 'Scene';
}

export async function onBeforeRender(pageContext) {
	const [scene] = await fetchScenesById([Number(pageContext.routeParams.sceneId)], {
		reqUser: pageContext.user,
		includeAssets: true,
		includePartOf: true,
		actorStashes: true,
	});

	const campaigns = await getRandomCampaigns([
		{
			minRatio: 1.5,
			entityIds: [scene.channel.id, scene.network?.id].filter(Boolean),
			allowRandomFallback: false,
		},
	], { tagFilter: pageContext.tagFilter });

	if (!scene) {
		throw render(404, `Cannot find scene '${pageContext.routeParams.sceneId}'.`);
	}

	return {
		pageContext: {
			title: getTitle(scene),
			pageProps: {
				scene,
			},
			campaigns: {
				scene: campaigns[0],
			},
		},
	};
}