// src/collections/YtNotifications.ts

import type { CollectionConfig } from 'payload'
import { canAccessOwnNotifications } from '../lib/youtubeAccess'

/**
 * YtNotifications Collection
 *
 * Benachrichtigungen für das YouTube Operations Team.
 * Werden automatisch bei Task-Zuweisungen und Statusänderungen erstellt.
 * Teil des YouTube Operations Hub.
 */
export const YtNotifications: CollectionConfig = {
  slug: 'yt-notifications',
  labels: {
    singular: 'Benachrichtigung',
    plural: 'Benachrichtigungen',
  },
  admin: {
    group: 'YouTube',
    defaultColumns: ['title', 'recipient', 'type', 'read', 'createdAt'],
    description: 'Benachrichtigungen für YouTube Operations',
  },
  access: {
    read: canAccessOwnNotifications,
    create: () => true, // System kann erstellen
    update: canAccessOwnNotifications,
    delete: ({ req }) => !!req.user?.isSuperAdmin,
  },
  fields: [
    {
      name: 'recipient',
      type: 'relationship',
      relationTo: 'users',
      required: true,
      label: 'Empfänger',
      index: true,
    },
    {
      name: 'type',
      type: 'select',
      required: true,
      label: 'Typ',
      options: [
        { label: 'Neue Aufgabe', value: 'task_assigned' },
        { label: 'Aufgabe fällig', value: 'task_due' },
        { label: 'Aufgabe überfällig', value: 'task_overdue' },
        { label: 'Freigabe erforderlich', value: 'approval_required' },
        { label: 'Freigabe erteilt', value: 'approved' },
        { label: 'Freigabe abgelehnt', value: 'rejected' },
        { label: 'Video veröffentlicht', value: 'video_published' },
        { label: 'Kommentar', value: 'comment' },
        { label: 'Erwähnung', value: 'mention' },
        { label: 'Token läuft ab', value: 'token_expiring' },
        { label: 'Token abgelaufen', value: 'token_expired' },
        { label: 'Token-Refresh fehlgeschlagen', value: 'token_refresh_failed' },
        { label: 'Token erneuert', value: 'token_refreshed' },
        { label: 'System', value: 'system' },
      ],
    },
    {
      name: 'title',
      type: 'text',
      required: true,
      localized: true,
      label: 'Titel',
    },
    {
      name: 'message',
      type: 'textarea',
      localized: true,
      label: 'Nachricht',
    },
    {
      name: 'link',
      type: 'text',
      label: 'Link',
      admin: {
        description: 'Relativer Pfad zum relevanten Element',
      },
    },
    {
      name: 'relatedVideo',
      type: 'relationship',
      relationTo: 'youtube-content',
      label: 'Video',
    },
    {
      name: 'relatedTask',
      type: 'relationship',
      relationTo: 'yt-tasks',
      label: 'Aufgabe',
    },
    {
      name: 'relatedAccount',
      type: 'relationship',
      relationTo: 'social-accounts',
      label: 'Social Account',
      admin: {
        description: 'Verknüpfter Social Account (für Token-Benachrichtigungen)',
      },
    },
    {
      name: 'read',
      type: 'checkbox',
      defaultValue: false,
      label: 'Gelesen',
    },
    {
      name: 'readAt',
      type: 'date',
      label: 'Gelesen am',
    },
    {
      name: 'emailSent',
      type: 'checkbox',
      defaultValue: false,
      label: 'E-Mail gesendet',
    },
  ],
  timestamps: true,
  hooks: {
    beforeChange: [
      // Setze readAt wenn read auf true wechselt
      ({ data, originalDoc }) => {
        if (!data) return data
        if (data.read && !originalDoc?.read) {
          data.readAt = new Date().toISOString()
        }
        return data
      },
    ],
  },
}
