import { tap, expect } from '@push.rocks/tapbundle';
import * as plugins from '../ts/plugins.js';
import * as paths from '../ts/paths.js';

// Import the components we want to test
import { SenderReputationMonitor } from '../ts/deliverability/classes.senderreputationmonitor.js';
import { IPWarmupManager } from '../ts/deliverability/classes.ipwarmupmanager.js';

// Ensure test directories exist
paths.ensureDirectories();

// Test SenderReputationMonitor functionality
tap.test('SenderReputationMonitor should track sending events', async () => {
  // Initialize monitor with test domain
  const monitor = SenderReputationMonitor.getInstance({
    enabled: true,
    domains: ['test-domain.com']
  });

  // Record some events
  monitor.recordSendEvent('test-domain.com', { type: 'sent', count: 100 });
  monitor.recordSendEvent('test-domain.com', { type: 'delivered', count: 95 });
  
  // Get domain metrics
  const metrics = monitor.getReputationData('test-domain.com');
  
  // Verify metrics were recorded
  if (metrics) {
    expect(metrics.volume.sent).toEqual(100);
    expect(metrics.volume.delivered).toEqual(95);
  }
});

// Test IPWarmupManager functionality
tap.test('IPWarmupManager should handle IP allocation policies', async () => {
  // Initialize warmup manager
  const manager = IPWarmupManager.getInstance({
    enabled: true,
    ipAddresses: ['192.168.1.1', '192.168.1.2'],
    targetDomains: ['test-domain.com']
  });
  
  // Set allocation policy
  manager.setActiveAllocationPolicy('balanced');
  
  // Verify allocation methods work
  const canSend = manager.canSendMoreToday('192.168.1.1');
  expect(typeof canSend).toEqual('boolean');
});

tap.test('stop', async () => {
  await tap.stopForcefully();
});

export default tap.start();