import { describe, it, expect } from 'vitest';
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { MailgunProviderAdapter } from '@zyphon/provider-email-mailgun';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const fixture = JSON.parse(
  fs.readFileSync(path.join(__dirname, 'fixtures/mailgun/success.json'), 'utf8'),
) as { statusCode: number; body: Record<string, unknown> };

describe('Mailgun contract', () => {
  it('maps recorded success fixture', async () => {
    const fetchFn = async () =>
      new Response(JSON.stringify(fixture.body), { status: fixture.statusCode });

    const adapter = new MailgunProviderAdapter({ id: 'mailgun-test', fetchFn });
    const result = await adapter.send(
      {
        message_id: 'msg_mg',
        request_id: 'req_mg',
        application_id: 'app',
        channel: 'email',
        recipient: 'user@example.com',
        content: { type: 'text', body: 'Hello', subject: 'Test' },
        metadata: {},
        created_at: Date.now(),
      },
      { api_key: 'key-secret', domain: 'mg.example.com', from: 'noreply@example.com' },
      AbortSignal.timeout(5000),
    );

    expect(result.success).toBe(true);
    expect(JSON.stringify(result)).not.toContain('key-secret');
  });
});
