import { contactFormSchema } from '@/schemas/contact-form.schema';
import { render, screen } from '@testing-library/react';
import { ContactForm } from './ContactForm';
import userEvent from '@testing-library/user-event';

describe('ContactForm', () => {
  it('renderiza todos los campos', () => {
    render(<ContactForm />);

    expect(screen.getByLabelText(/nombre/i)).toBeInTheDocument();

    expect(screen.getByLabelText(/apellido/i)).toBeInTheDocument();

    expect(screen.getByLabelText(/teléfono/i)).toBeInTheDocument();

    expect(screen.getByLabelText(/email/i)).toBeInTheDocument();

    expect(screen.getByLabelText(/mensaje o consulta/i)).toBeInTheDocument();
  });

  it('muestra errores al enviar vacío', async () => {
    render(<ContactForm />);

    await userEvent.click(
      screen.getByRole('button', {
        name: /enviar consulta/i,
      }),
    );

    expect(await screen.findByText('Ingresa tu nombre completo')).toBeInTheDocument();

    expect(await screen.findByText('Correo inválido')).toBeInTheDocument();
  });
});

describe('contactFormSchema', () => {
  it('acepta datos válidos', () => {
    const result = contactFormSchema.safeParse({
      name: 'Juan Carlos',
      surname: 'Gonzales',
      phone: '1122334455',
      email: 'juan@test.com',
      message: 'Hola, buenos días, tengo un mensaje re copado para mandarte',
    });

    expect(result.success).toBe(true);
  });

  it('rechaza email inválido', () => {
    const result = contactFormSchema.safeParse({
      name: 'Juan Pérez',
      surname: '12345678',
      phone: '1122334455',
      email: 'correo-invalido',
      message: 'Hola, buenos días, tengo un mensaje re copado para mandarte',
    });

    expect(result.success).toBe(false);
  });

  it('rechaza número telefónico inválido', () => {
    const result = contactFormSchema.safeParse({
      name: 'Juan Pérez',
      surname: '12345678',
      phone: '112',
      email: 'juan@test.com',
      message: 'Hola, buenos días, tengo un mensaje re copado para mandarte',
    });

    expect(result.success).toBe(false);
  });
  it('rechaza mensaje incompleto', () => {
    const result = contactFormSchema.safeParse({
      name: 'Juan Pérez',
      surname: '12345678',
      phone: '112123123123',
      email: 'juan@test.com',
      message: '',
    });

    expect(result.success).toBe(false);
  });
});
