import { revalidatePath, revalidateTag } from 'next/cache';
import type { CollectionAfterChangeHook, CollectionAfterDeleteHook } from 'payload';

import type { Post } from '../../../payload-types';

export const revalidatePost: CollectionAfterChangeHook<Post> = ({
  doc,
  previousDoc,
  req: { payload, context },
}) => {
  if (!context.disableRevalidate) {
    if (doc._status === 'published') {
      const basePath = doc.postType === 'hub' ? '/hub' : '/blog';
      const path = `${basePath}/${doc.slug}`;

      payload.logger.info(`Revalidating post at path: ${path}`);

      revalidatePath(path);
      revalidateTag('posts-sitemap');
    }

    // If the post was previously published, we need to revalidate the old path
    if (previousDoc._status === 'published' && doc._status !== 'published') {
      const basePath = previousDoc.postType === 'hub' ? '/hub' : '/blog';
      const oldPath = `${basePath}/${previousDoc.slug}`;

      payload.logger.info(`Revalidating old post at path: ${oldPath}`);

      revalidatePath(oldPath);
      revalidateTag('posts-sitemap');
    }
  }
  return doc;
};

export const revalidateDelete: CollectionAfterDeleteHook<Post> = ({ doc, req: { context } }) => {
  if (!context.disableRevalidate) {
    const basePath = doc?.postType === 'hub' ? '/hub' : '/blog';
    const path = `${basePath}/${doc?.slug}`;

    revalidatePath(path);
    revalidateTag('posts-sitemap');
  }

  return doc;
};
