import { formBuilderPlugin } from '@payloadcms/plugin-form-builder';
import { nestedDocsPlugin } from '@payloadcms/plugin-nested-docs';
import { redirectsPlugin } from '@payloadcms/plugin-redirects';
import { seoPlugin } from '@payloadcms/plugin-seo';
import { searchPlugin } from '@payloadcms/plugin-search';
import { Plugin } from 'payload';
//import { revalidateRedirects } from '@/hooks/revalidateRedirects'
import { FixedToolbarFeature, HeadingFeature, lexicalEditor } from '@payloadcms/richtext-lexical';
//import { searchFields } from '@/search/fieldOverrides'
//import { beforeSyncWithSearch } from '@/search/beforeSync'

//import { Page, Post } from '@/payload-types'
//import { getServerSideURL } from '@/utilities/getURL'

export const plugins: Plugin[] = [
  redirectsPlugin({
    collections: ['pages'],
    overrides: {
      // @ts-expect-error - This is a valid override, mapped fields don't resolve to the same type
      fields: ({ defaultFields }) => {
        return defaultFields.map((field) => {
          if ('name' in field && field.name === 'from') {
            return {
              ...field,
              admin: {
                description: 'You will need to rebuild the website when changing this field.'
              }
            };
          }
          return field;
        });
      },
      hooks: {
        //afterChange: [revalidateRedirects],
      }
    }
  }),
  /*nestedDocsPlugin({
    collections: ['pages'],
    generateURL: (docs) => docs.map(doc => doc.slug).join('/'),
    breadcrumbsFieldSlug: 'breadcrumbs',
  }),*/
  seoPlugin({
    generateTitle: ({ doc }) => `Website.com — ${doc.title}`,
    generateDescription: ({ doc }) => doc.excerpt
  }),

  formBuilderPlugin({
    fields: {
      payment: false
    },
    formOverrides: {
      fields: ({ defaultFields }) => {
        return defaultFields.map((field) => {
          if ('name' in field && field.name === 'confirmationMessage') {
            return {
              ...field,
              editor: lexicalEditor({
                features: ({ rootFeatures }) => {
                  return [...rootFeatures, FixedToolbarFeature(), HeadingFeature({ enabledHeadingSizes: ['h1', 'h2', 'h3', 'h4'] })];
                }
              })
            };
          }
          return field;
        });
      }
    }
  })
];
