import AuditLogIcon from '../../components/Icons/AuditLogIcon'

export const AuditLog = {
  name: 'auditLog',
  label: 'Audit Log',
  labelPlural: 'Audit Logs',
  url: '/dashboard/management/auditlogs',
  prefix: 'ADL',
  icon: AuditLogIcon,
  actions: [],
  columns: [
    '_reference',
    'owner',
    'parent',
    'operation',
    'changes',
    'createdAt'
  ],
  filters: [
    'parent._id',
    'owner._id',
    'operation',
    'createdAt',
    'updatedAt',
    '_reference'
  ],
  sorters: ['createdAt', 'updatedAt'],
  properties: [
    {
      name: '_id',
      label: 'ID',
      type: 'id',
      objectType: 'auditLog',
      columnFixed: 'left',
      value: null,
      showCopy: true,
      columnWidth: 140
    },
    {
      name: 'createdAt',
      label: 'Created At',
      type: 'dateTime',
      value: null,
      readOnly: true,
      columnWidth: 175
    },
    {
      name: '_reference',
      label: 'Reference',
      type: 'reference',
      columnFixed: 'left',
      objectType: 'auditLog',
      showCopy: true,
      readOnly: true,
      columnWidth: 180
    },
    {
      name: 'updatedAt',
      label: 'Updated At',
      type: 'dateTime',
      value: null,
      readOnly: true,
      columnWidth: 175
    },
    {
      name: 'owner',
      label: 'Owner',
      type: 'object',
      objectType: (objectData) => {
        return objectData.ownerType
      },
      columnFixed: 'left',
      value: null,
      showCopy: true,
      showHyperlink: true,
      columnWidth: 200
    },
    {
      name: 'parent',
      label: 'Parent',
      type: 'object',
      objectType: (objectData) => {
        return objectData.parentType
      },
      value: null,
      showCopy: true,
      showHyperlink: true,
      columnWidth: 200
    },
    {
      name: 'operation',
      label: 'Operation',
      columnWidth: 120,
      type: 'operation'
    },
    {
      name: 'changes',
      label: 'Changes',
      columnWidth: 500,
      type: (objectData) => {
        return objectData.operation === 'subscribe' ||
          objectData.operation === 'unsubscribe'
          ? 'text'
          : 'propertyChanges'
      },
      objectType: (objectData) => {
        return objectData.parentType
      },
      value: (objectData) => {
        if (objectData.operation === 'subscribe') {
          return 'User subscribed to object.'
        }
        if (objectData.operation === 'unsubscribe') {
          return 'User unsubscribed from object.'
        }

        return objectData.changes
      },
      showCopy: true
    }
  ]
}
