import type { Payload, CollectionSlug } from 'payload'

const CONSENT_LOGS_COLLECTION = 'consent-logs' as CollectionSlug

/**
 * Consent Retention Job
 *
 * Löscht abgelaufene ConsentLogs gemäß DSGVO Art. 5 Abs. 1e (Speicherbegrenzung).
 * Sollte täglich via Cron ausgeführt werden.
 */
export const runConsentRetentionJob = async (payload: Payload): Promise<void> => {
  const now = new Date().toISOString()

  try {
    // Finde abgelaufene Einträge
    const expired = await payload.find({
      collection: CONSENT_LOGS_COLLECTION,
      where: {
        expiresAt: {
          less_than: now,
        },
      },
      limit: 1000, // Batch-Größe
    })

    if (expired.docs.length === 0) {
      console.log('[ConsentRetention] Keine abgelaufenen Einträge gefunden.')
      return
    }

    console.log(
      `[ConsentRetention] ${expired.docs.length} abgelaufene Einträge gefunden. Lösche...`,
    )

    // Lösche jeden Eintrag einzeln (WORM-Bypass via direktem DB-Zugriff)
    // Da delete: () => false gesetzt ist, müssen wir den DB-Adapter direkt nutzen
    for (const doc of expired.docs) {
      await payload.db.deleteOne({
        collection: CONSENT_LOGS_COLLECTION,
        where: { id: { equals: doc.id } },
      })
    }

    console.log(`[ConsentRetention] ${expired.docs.length} Einträge gelöscht.`)

    // Falls mehr als 1000 Einträge: Rekursiv weitermachen
    if (expired.docs.length === 1000) {
      console.log('[ConsentRetention] Weitere Einträge vorhanden, führe nächsten Batch aus...')
      await runConsentRetentionJob(payload)
    }
  } catch (error) {
    console.error('[ConsentRetention] Fehler:', error)
    throw error
  }
}
