import { describe, expect, it } from 'vitest';

import {
  residentialClientConfirmation,
  residentialSalesAlert,
} from '@/lib/email/templates/residential-inquiry';

describe('residentialClientConfirmation', () => {
  it('mirrors the website copy + reflects the chosen residence types', async () => {
    const { subject, html, text } = await residentialClientConfirmation({
      firstName: 'Mia',
      contactEmail: 'sales@portnimara.com',
      residenceTypes: ['Two Bedroom Marina Villa', 'Five Bedroom Oceanfront Villa'],
      portName: 'Port Nimara',
    });
    expect(subject).toBe('Port Nimara — Thank You for Your Interest');
    expect(text).toContain(
      'Thank you for expressing interest in the Two Bedroom Marina Villa and the Five Bedroom Oceanfront Villa',
    );
    expect(text).toContain('Our team has registered your interest');
    expect(text).toContain('The Port Nimara Residences Team');
    // Never leak the CRM brand name to a client.
    expect(html).not.toContain('Port Nimara CRM');
  });

  it('falls back to the website generic phrase when no types are selected', async () => {
    const { html } = await residentialClientConfirmation({
      firstName: 'Sam',
      contactEmail: 'sales@portnimara.com',
      portName: 'Port Nimara',
    });
    expect(html).toContain('a Port Nimara Residence');
    expect(html).not.toContain('Port Nimara CRM');
  });
});

describe('residentialSalesAlert', () => {
  it('renders residence type(s) + preferred contact + comments, with NO CRM mention', async () => {
    const { html, text } = await residentialSalesAlert({
      fullName: 'Mia Ng',
      email: 'mia@example.com',
      phone: '+15551234',
      residenceTypes: ['Two Bedroom Marina Villa'],
      preferredContactMethod: 'phone',
      notes: 'Looking for a winter completion.',
      portName: 'Port Nimara',
    });
    expect(html).toContain('A new residential enquiry has come in');
    expect(html).toContain('Residence type(s):');
    expect(html).toContain('Two Bedroom Marina Villa');
    expect(html).toContain('Preferred contact:');
    expect(html).toContain('Phone call back');
    expect(html).toContain('Looking for a winter completion.');
    expect(text).toContain('- Port Nimara Residences');
    // Residential internal alerts must not mention the CRM (recipient is external).
    expect(html).not.toContain('CRM');
    expect(html).not.toContain('to follow up');
    expect(text).toContain('Residence type(s): Two Bedroom Marina Villa');
    expect(text).toContain('Preferred contact: Phone call back');
    expect(text).toContain('Comments: Looking for a winter completion.');
    expect(text).not.toContain('CRM');
  });

  it('omits optional rows cleanly when absent', async () => {
    const { html } = await residentialSalesAlert({
      fullName: 'Bob Smith',
      email: 'bob@example.com',
      phone: '+1999',
      portName: 'Port Nimara',
    });
    expect(html).not.toContain('Residence type(s):');
    expect(html).not.toContain('Preferred contact:');
    expect(html).toContain('Bob Smith');
  });
});
