import type { CollectionConfig } from 'payload'; export const FormSubmissions: CollectionConfig = { slug: 'form-submissions', admin: { useAsTitle: 'name', defaultColumns: ['name', 'email', 'type', 'createdAt'], description: 'Captured leads from Contact and Product Quote forms.', }, access: { // Only Admins can view and delete leads via dashboard. // E2E scripts can bypass if they provide the correct secret header. read: ({ req }) => { const isE2E = req.headers.get('x-e2e-secret') === process.env.PAYLOAD_SECRET; return Boolean(req.user) || isE2E || process.env.NODE_ENV === 'development'; }, update: ({ req }) => { const isE2E = req.headers.get('x-e2e-secret') === process.env.PAYLOAD_SECRET; return Boolean(req.user) || isE2E || process.env.NODE_ENV === 'development'; }, delete: ({ req }) => { const isE2E = req.headers.get('x-e2e-secret') === process.env.PAYLOAD_SECRET; return Boolean(req.user) || isE2E || process.env.NODE_ENV === 'development'; }, // Next.js server actions handle secure inserts natively. No public client create access. create: () => false, }, fields: [ { name: 'name', type: 'text', required: true, admin: { readOnly: true, }, }, { name: 'email', type: 'email', required: true, admin: { readOnly: true, }, }, { name: 'type', type: 'select', options: [ { label: 'General Contact', value: 'contact' }, { label: 'Product Quote', value: 'product_quote' }, ], required: true, admin: { position: 'sidebar', readOnly: true, }, }, { name: 'productName', type: 'text', admin: { position: 'sidebar', readOnly: true, condition: (data) => data.type === 'product_quote', description: 'The specific KLZ product the user requested a quote for.', }, }, { name: 'message', type: 'textarea', required: true, admin: { readOnly: true, }, }, ], };