import type { CollectionConfig } from 'payload'

import { adminOnly, anyRole, adminOrEditorAdmin, hasRole } from '@/access/roles'

export const AuditLogs: CollectionConfig = {
  slug: 'audit-logs',
  access: {
    admin: adminOrEditorAdmin,
    create: anyRole,
    read: ({ req: { user } }) => {
      if (!user) return false
      if (hasRole(user, ['admin'])) return true
      return {
        user: {
          equals: user.id,
        },
      }
    },
    update: adminOnly,
    delete: adminOnly,
  },
  admin: {
    useAsTitle: 'action',
    defaultColumns: ['createdAt', 'action', 'entityType', 'entity', 'docId', 'user', 'userEmail'],
  },
  fields: [
    {
      name: 'action',
      type: 'select',
      required: true,
      options: [
        { label: 'Create', value: 'create' },
        { label: 'Update', value: 'update' },
        { label: 'Delete', value: 'delete' },
      ],
    },
    {
      name: 'entityType',
      type: 'select',
      required: true,
      options: [
        { label: 'Collection', value: 'collection' },
        { label: 'Global', value: 'global' },
      ],
    },
    {
      name: 'entity',
      type: 'text',
      required: true,
    },
    {
      name: 'docId',
      type: 'text',
    },
    {
      name: 'user',
      type: 'relationship',
      relationTo: 'users',
    },
    {
      name: 'userName',
      type: 'text',
    },
    {
      name: 'userEmail',
      type: 'text',
    },
    {
      name: 'ip',
      type: 'text',
    },
    {
      name: 'data',
      type: 'json',
    },
  ],
  timestamps: true,
}
