import { sessionRepo } from '@/lib/database/repositories/session.repo'
import { settingsRepo } from '@/lib/database/repositories/settings.repo'

let lastSessionCleanupTime = 0

/**
 * Auto-clean old sessions based on session_retention setting.
 * Throttled: runs at most once per hour (per process).
 * Safe to call on every request — no-ops if throttled or set to 'permanent'.
 */
export function runSessionCleanup(): void {
  const now = Date.now()
  if (now - lastSessionCleanupTime < 3600_000) return
  lastSessionCleanupTime = now

  const retentionValue = settingsRepo.getGlobal('session_retention') || 'permanent'

  if (retentionValue === 'permanent') return

  const retentionDays = parseInt(retentionValue, 10)
  if (!(retentionDays > 0)) return

  const cutoff = new Date(Date.now() - retentionDays * 86400_000).toISOString()
  const oldSessions = sessionRepo.listExpired(cutoff)

  if (oldSessions.length > 0) {
    for (const s of oldSessions) {
      sessionRepo.deleteById(s.id)
    }
    console.log(`[session-cleanup] Cleaned ${oldSessions.length} expired sessions (retention: ${retentionDays}d)`)
  }
}
