// src/hooks/ytTasks/notifyOnAssignment.ts

import type { CollectionAfterChangeHook } from 'payload'

/**
 * Hook: Erstellt Benachrichtigung bei Task-Zuweisung
 *
 * Wird aufgerufen nach jeder Änderung an einem YtTask-Dokument.
 * Erstellt eine Notification wenn ein Task neu zugewiesen wird.
 */
export const notifyOnAssignment: CollectionAfterChangeHook = async ({
  doc,
  previousDoc,
  req,
  operation,
}) => {
  // Ermittle vorherige und aktuelle Zuweisung
  const previousAssignedTo = previousDoc?.assignedTo
    ? typeof previousDoc.assignedTo === 'object'
      ? previousDoc.assignedTo.id
      : previousDoc.assignedTo
    : null

  const currentAssignedTo = doc.assignedTo
    ? typeof doc.assignedTo === 'object'
      ? doc.assignedTo.id
      : doc.assignedTo
    : null

  // Prüfe ob es eine neue oder geänderte Zuweisung ist
  const isNewAssignment = operation === 'create' || previousAssignedTo !== currentAssignedTo

  if (isNewAssignment && currentAssignedTo) {
    try {
      const taskTitle = typeof doc.title === 'string' ? doc.title : doc.title?.de || doc.title?.en || 'Aufgabe'

      await req.payload.create({
        collection: 'yt-notifications',
        data: {
          recipient: currentAssignedTo,
          type: 'task_assigned',
          title: `Neue Aufgabe: ${taskTitle}`,
          message: doc.dueDate
            ? `Fällig am ${new Date(doc.dueDate).toLocaleDateString('de-DE')}`
            : 'Keine Deadline gesetzt',
          link: `/admin/collections/yt-tasks/${doc.id}`,
          relatedTask: doc.id,
          relatedVideo: doc.video
            ? typeof doc.video === 'object'
              ? doc.video.id
              : doc.video
            : undefined,
        },
      })

      console.log(`[notifyOnAssignment] Created notification for user ${currentAssignedTo}, task ${doc.id}`)
    } catch (error) {
      console.error('[notifyOnAssignment] Error creating notification:', error)
    }
  }

  return doc
}
