// storage-adapter-import-placeholder
import {
  lexicalEditor,
  BoldFeature,
  InlineToolbarFeature,
  ItalicFeature,
  UnderlineFeature,
  ParagraphFeature,
  HeadingFeature,
  AlignFeature,
  UnorderedListFeature,
  LinkFeature,
  HTMLConverterFeature,
} from '@payloadcms/richtext-lexical'
import path from 'path'
import { buildConfig } from 'payload'
import { fileURLToPath } from 'url'
import sharp from 'sharp'

import { Users } from './collections/Users'
import { Media } from './collections/Media'
import { Worship } from '@/collections/Worship'
import { Churches } from '@/collections/Churches'
import { de } from '@payloadcms/translations/languages/de'
import { Testimony } from '@/collections/Testimony'
import { Parish } from '@/collections/Parish'
import { Employees } from '@/collections/Employees'
import { Groups } from '@/collections/Groups'
import { Events } from '@/collections/Events'
import { Announcements } from '@/collections/Announcements'
import { Blog } from '@/collections/Blog'
import { Highlight } from '@/collections/Highlight'
import { Pages } from '@/collections/Pages'
import { Documents } from '@/collections/Documents'
import { Locations } from '@/collections/Locations'
import { ContactPerson } from '@/collections/ContactPerson'
import { postgresAdapter } from '@payloadcms/db-postgres'
import { gcsStorage } from '@payloadcms/storage-gcs'
import { PopesPrayerIntentions } from '@/collections/PopesPrayerIntentions'
import { LiturgicalCalendar } from '@/collections/LiturgicalCalendar'

const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)

export default buildConfig({
  admin: {
    user: Users.slug,
  },
  collections: [
    Parish,
    Churches,
    Worship,
    PopesPrayerIntentions,
    Announcements,
    LiturgicalCalendar,
    Blog,
    Highlight,
    Events,
    ContactPerson,
    Locations,
    Groups,
    Employees,
    Testimony,
    Pages,
    Users,
    Documents,
    Media,
  ],
  editor: lexicalEditor(
    {
      features: () => [
        BoldFeature(),
        ItalicFeature(),
        UnderlineFeature(),
        HeadingFeature({ enabledHeadingSizes: ["h3","h4","h5"]}),
        AlignFeature(),
        UnorderedListFeature(),
        LinkFeature(),
        ParagraphFeature(),
        InlineToolbarFeature(),
        HTMLConverterFeature()
      ]
    }
  ),
  secret: process.env.PAYLOAD_SECRET || '',
  typescript: {
    outputFile: path.resolve(dirname, 'payload-types.ts'),
  },
  i18n: {
    supportedLanguages: { de },
  },
  db: postgresAdapter({
    idType: "uuid",
    push: false,
    pool: {
      connectionString: process.env.DATABASE_URI,
    }
  }),
  sharp,
  plugins: [
    gcsStorage({

      collections: {
        media: {
          disablePayloadAccessControl: true,
          prefix: 'media/',
          generateFileURL: args => `https://storage.googleapis.com/${process.env.GOOGLE_BUCKET}/media/${args.filename}`
        },
        documents: {
          disablePayloadAccessControl: true,
          prefix: 'documents/',
          generateFileURL: args => `https://storage.googleapis.com/${process.env.GOOGLE_BUCKET}/documents/${args.filename}`
        },
      },
      bucket: process.env.GOOGLE_BUCKET || "",
      options: {},
      acl: undefined
    })
  ],
})
