/**
 * Data retention purge cron — audit-compliance (wave-11 leaf-D).
 * Invoked monthly on the 1st at 00:00 UTC via the cron dispatcher.
 * Purges audit_log rows older than 7 years (2555 days) per IL-tax retention law.
 *
 * Guarded by CRON_SECRET (timing-safe comparison via @zync/auth#timingSafeEqual).
 */
import { Hono } from 'hono'
import { timingSafeEqual } from '@zync/auth'
import type { AppEnv } from '../../types'
import { createDb, deleteExpiredAuditLogs } from '@zync/db/queries'

export const dataRetentionPurgeCron = new Hono<AppEnv>()

dataRetentionPurgeCron.post('/', async (c) => {
  // Timing-safe secret check — never use ===
  const secret = c.req.header('x-cron-secret') ?? ''
  const expected = c.env.CRON_SECRET
  if (!expected || expected.length < 16) {
    return c.json({ error: 'Server misconfigured' }, 500)
  }

  if (!timingSafeEqual(secret, expected)) {
    return c.json({ error: 'Forbidden' }, 403)
  }

  const db = createDb(c.env)
  // 7 years = 2555 days (365 * 7)
  const deleted = await deleteExpiredAuditLogs(db, 2555)
  return c.json({ ok: true, deleted }, 200)
})
