import { SubPayload } from "@client/types/form/favSub";
import { isLoggedIn } from "@server/middlewareButNotReally";
import { User } from "@models/user";

export default eventHandler(async (ev) => {
	isLoggedIn(ev);
	// note: debounced batched update
	const body = await readBody<SubPayload>(ev);
	await User.findByIdAndUpdate(ev.context.currentUser!._id, {
		$pull: {
			"subscriptions.authors": {
				$in: body.pull?.authors,
			},
			"subscriptions.bands": {
				$in: body.pull?.bands ?? [],
			},
			"subscriptions.stories": {
				$in: body.pull?.stories ?? [],
			},
		},
	});
	const nu = await User.findByIdAndUpdate(
		ev.context.currentUser!._id,
		{
			$addToSet: {
				"subscriptions.authors": {
					$each: body.pull?.authors ?? [],
				},
				"subscriptions.bands": {
					$each: body.pull?.bands ?? [],
				},
				"subscriptions.stories": {
					$each: body.pull?.stories ?? [],
				},
			},
		},
		{ new: true },
	);
	return {
		success: true,
		data: nu?.subscriptions,
	};
});
