import type { DailyLogWriter } from '@zyphon/logger';
import type { EventBus } from '../realtime/event-bus.js';

export class LogJanitor {
  private logWriter: DailyLogWriter;
  private eventBus: EventBus;
  private intervalTimer: NodeJS.Timeout | null = null;
  private retentionDays: number;

  constructor(logWriter: DailyLogWriter, eventBus: EventBus, retentionDays = 7) {
    this.logWriter = logWriter;
    this.eventBus = eventBus;
    this.retentionDays = retentionDays;
  }

  public start(intervalMs = 60 * 60 * 1000): void {
    // Run immediately at startup
    this.runPrune();

    this.intervalTimer = setInterval(() => {
      this.runPrune();
    }, intervalMs);

    if (this.intervalTimer.unref) {
      this.intervalTimer.unref();
    }
  }

  public runPrune(): string[] {
    const deleted = this.logWriter.prune(this.retentionDays);
    if (deleted.length > 0) {
      this.logWriter.write({
        type: 'audit',
        ts: Date.now(),
        event: 'LOGS_PRUNED',
        details: { deleted_files: deleted, retention_days: this.retentionDays },
        actor: 'system:log-janitor',
      });

      this.eventBus.publish('audit_event', {
        action: 'LOGS_PRUNED',
        deleted_files: deleted,
      });
    }
    return deleted;
  }

  public stop(): void {
    if (this.intervalTimer) {
      clearInterval(this.intervalTimer);
      this.intervalTimer = null;
    }
  }
}

