import type { NextApiRequestLike, NextApiResponseLike } from "./types"

/** Configuration for `exitPreview()`. */
export type ExitPreviewAPIRouteConfig = {
	/**
	 * The `req` object from a Next.js API route.
	 *
	 * @see Next.js API route docs: \<https://nextjs.org/docs/api-routes/introduction\>
	 */
	req?: NextApiRequestLike

	/**
	 * The `res` object from a Next.js API route.
	 *
	 * @see Next.js API route docs: \<https://nextjs.org/docs/api-routes/introduction\>
	 */
	res: NextApiResponseLike
}

/**
 * Ends a Prismic preview session within a Next.js app. This function should be used in an API
 * route.
 *
 * @example
 * 	;```typescript
 * 	// src/pages/api/exit-preview.js
 *
 * 	import { exitPreview } from "@prismicio/next"
 *
 * 	export default function handler(_req, res) {
 * 		return exitPreview({ res })
 * 	}
 * 	```
 */
export function exitPreview(config: ExitPreviewAPIRouteConfig): void {
	config.res.clearPreviewData()

	// `Cache-Control` header is used to prevent CDN-level caching.
	config.res.setHeader("Cache-Control", "no-store")

	config.res.json({ success: true })

	return
}
