import { buildConfig } from 'payload'
import { lexicalEditor } from '@payloadcms/richtext-lexical'
import { postgresAdapter } from '@payloadcms/db-postgres'
import { sqliteAdapter } from '@payloadcms/db-sqlite'
import sharp from 'sharp'
import path from 'path'
import { fileURLToPath } from 'url'

import { Users } from './collections/Users'
import { Media } from './collections/Media'
import { Markets } from './collections/Markets'
import { Pricing } from './collections/Pricing'
import { Addons } from './collections/Addons'
import { Pillars } from './collections/Pillars'
import { CityScenes } from './collections/CityScenes'
import { Product } from './globals/Product'
import { Images } from './globals/Images'
import { epcContentEndpoint } from './endpoints/epcContent'

const dirname = path.dirname(fileURLToPath(import.meta.url))
const DB = process.env.DATABASE_URI || 'file:./epc.db'

export default buildConfig({
  secret: process.env.PAYLOAD_SECRET || 'dev-only-change-me',
  serverURL: process.env.PAYLOAD_PUBLIC_SERVER_URL || 'http://localhost:3000',

  admin: {
    user: Users.slug,
    meta: { titleSuffix: ' · EPC Delivery' },
    // Brand the studio: import ./styles/admin.css inside the generated
    // src/app/(payload)/layout.tsx (one line) — see DEPLOY-cpanel.md §Brand.
  },

  editor: lexicalEditor(),
  sharp,

  // Postgres in production; SQLite locally (or for a tiny single-box install).
  db: DB.startsWith('postgres')
    ? postgresAdapter({ pool: { connectionString: DB } })
    : sqliteAdapter({ client: { url: DB } }),

  collections: [Users, Media, Markets, Pricing, Addons, Pillars, CityScenes],
  globals: [Product, Images],

  endpoints: [epcContentEndpoint],

  // Front-end origin(s) allowed to call the API at runtime.
  cors: (process.env.CORS_ORIGINS || '').split(',').map((s) => s.trim()).filter(Boolean),
  csrf: (process.env.CORS_ORIGINS || '').split(',').map((s) => s.trim()).filter(Boolean),

  typescript: { outputFile: path.resolve(dirname, 'payload-types.ts') },

  // ---- Go bilingual later: set LOCALIZED=true in src/fields/localized.ts AND
  //      uncomment this block. No other change needed. ------------------------
  // localization: {
  //   locales: [{ label: 'Srpski', code: 'sr' }, { label: 'English', code: 'en' }],
  //   defaultLocale: 'sr',
  //   fallback: true,
  // },
})
