import { describe, it, expect, beforeAll } from 'vitest';
import { initializeBrevo, testConnection, validateEmail, validateEmailList } from './_core/brevo.ts';

describe('Brevo Email Service', () => {
  beforeAll(() => {
    // Initialize Brevo with environment variables
    const smtpConfig = {
      host: process.env.BREVO_SMTP_HOST || 'smtp-relay.brevo.com',
      port: parseInt(process.env.BREVO_SMTP_PORT || '587'),
      user: process.env.BREVO_SMTP_USER || '',
      pass: process.env.BREVO_SMTP_PASS || '',
    };

    const initialized = initializeBrevo(smtpConfig);
    expect(initialized).toBe(true);
  });

  it('should validate email addresses correctly', () => {
    expect(validateEmail('test@example.com')).toBe(true);
    expect(validateEmail('invalid-email')).toBe(false);
    expect(validateEmail('user@domain.co.uk')).toBe(true);
  });

  it('should validate email lists', () => {
    const emails = ['valid@example.com', 'invalid-email', 'another@test.com'];
    const result = validateEmailList(emails);

    expect(result.valid).toHaveLength(2);
    expect(result.invalid).toHaveLength(1);
    expect(result.valid).toContain('valid@example.com');
    expect(result.invalid).toContain('invalid-email');
  });

  it('should verify SMTP connection', async () => {
    const connected = await testConnection();
    expect(connected).toBe(true);
  });

  it('should have required environment variables', () => {
    expect(process.env.BREVO_SMTP_HOST).toBeDefined();
    expect(process.env.BREVO_SMTP_PORT).toBeDefined();
    expect(process.env.BREVO_SMTP_USER).toBeDefined();
    expect(process.env.BREVO_SMTP_PASS).toBeDefined();
  });
});
