import { test, expect } from '@playwright/test';
import { RegisterPage } from '../../../page-objects/RegisterPage';

test.describe('Негативные сценарии регистрации', () => {

  test('Отправка пустой формы', async ({ page }) => {
    const registerPage = new RegisterPage(page);
    await registerPage.goto();
    await registerPage.submit();

    const requiredErrors = await page.locator('div[name="error"]', { hasText: 'Поле обязательно для заполнения' }).allTextContents();
    expect(requiredErrors.length).toBeGreaterThan(0);
    await expect(page.getByText('Не менее 8 символов')).toBeVisible(); // пароль
  });

  test('Некорректное имя и фамилия (слишком длинные)', async ({ page }) => {
    const registerPage = new RegisterPage(page);
    await registerPage.goto();

    await registerPage.fillName('А'.repeat(51));
    await registerPage.fillSurname('Б'.repeat(51));
    await registerPage.submit();

    await expect(page.getByText('Некорректное имя')).toBeVisible();
    await expect(page.getByText('Некорректная фамилия')).toBeVisible();
  });

  test('Некорректный email формат', async ({ page }) => {
    const registerPage = new RegisterPage(page);
    await registerPage.goto();

    await registerPage.fillEmail('invalid-email');
    await registerPage.submit();

    await expect(page.getByText('Некорректный Email')).toBeVisible();
  });

  test('Слишком длинная должность', async ({ page }) => {
    const registerPage = new RegisterPage(page);
    await registerPage.goto();

    await registerPage.fillPosition('X'.repeat(201));
    await registerPage.submit();

    await expect(page.getByText('Не более 200 символов!')).toBeVisible();
  });

  test('Слишком длинное название организации', async ({ page }) => {
    const registerPage = new RegisterPage(page);
    await registerPage.goto();

    // Заполнить все поля валидно, кроме организации
    await registerPage.register({
      name: 'Иван',
      surname: 'Иванов',
      patronymic: '',
      academicTitle: 'Доцент',
      degree: 'Кандидат наук',
      position: 'Преподаватель',
      organization: 'О'.repeat(201),
      email: `test${Date.now()}@example.com`,
      phone: `+7999${Math.floor(Math.random() * 1000000).toString().padStart(7, '0')}`,
      password: '!Test123',
      confirmPassword: '!Test123'
    });

    await expect(page.getByText('Некорректное название организации!')).toBeVisible();
  });

});
