import { test, expect } from '@playwright/test';
import { WORKER_URL, createTestAddress, deleteAddress } from '../../fixtures/test-helpers';

test.describe('Auto Reply Settings', () => {
  test('get empty, save, then verify saved settings', async ({ request }) => {
    const { jwt } = await createTestAddress(request, 'auto-reply');

    try {
      // GET auto_reply — should return empty object for new address
      const emptyRes = await request.get(`${WORKER_URL}/api/auto_reply`, {
        headers: { Authorization: `Bearer ${jwt}` },
      });
      expect(emptyRes.ok()).toBe(true);
      const empty = await emptyRes.json();
      expect(Object.keys(empty)).toHaveLength(0);

      // POST save auto_reply settings
      const saveRes = await request.post(`${WORKER_URL}/api/auto_reply`, {
        headers: { Authorization: `Bearer ${jwt}` },
        data: {
          auto_reply: {
            name: 'Test Bot',
            subject: 'Auto Reply',
            source_prefix: 'Re:',
            message: 'Thanks for your email!',
            enabled: true,
          },
        },
      });
      expect(saveRes.ok()).toBe(true);
      const saveBody = await saveRes.json();
      expect(saveBody.success).toBe(true);

      // GET auto_reply — should return saved settings
      const savedRes = await request.get(`${WORKER_URL}/api/auto_reply`, {
        headers: { Authorization: `Bearer ${jwt}` },
      });
      expect(savedRes.ok()).toBe(true);
      const saved = await savedRes.json();
      expect(saved.name).toBe('Test Bot');
      expect(saved.subject).toBe('Auto Reply');
      expect(saved.source_prefix).toBe('Re:');
      expect(saved.message).toBe('Thanks for your email!');
      expect(saved.enabled).toBe(true);
    } finally {
      await deleteAddress(request, jwt);
    }
  });

  test('save with too long subject returns 400', async ({ request }) => {
    const { jwt } = await createTestAddress(request, 'auto-reply-long');

    try {
      const saveRes = await request.post(`${WORKER_URL}/api/auto_reply`, {
        headers: { Authorization: `Bearer ${jwt}` },
        data: {
          auto_reply: {
            name: 'Bot',
            subject: 'x'.repeat(256),
            source_prefix: '',
            message: 'Hello',
            enabled: true,
          },
        },
      });
      expect(saveRes.status()).toBe(400);
      const body = await saveRes.text();
      expect(body).toContain('too long');
    } finally {
      await deleteAddress(request, jwt);
    }
  });
});
