import { test, expect } from '@playwright/test';
import fs from 'fs';
import axios from 'axios';
import {
  createTempEmail,
  waitForConfirmationCode
} from '../../../utils/mailTmApi';
import {
  generateFirstName,
  generateLastName,
  generateMiddleName,
  generateLogin,
  generatePhone,
} from '../../../utils/userGenerator';

const BASE_URL = 'https://rumc.dev.rdcenter.ru/api';

test('API: регистрация абитуриента + подтверждение почты', async () => {
  await new Promise(r => setTimeout(r, 3000));
  const { email, token: mailToken } = await createTempEmail();

  const surname = generateLastName();
  const name = generateFirstName();
  const patronymic = generateMiddleName();
  const fullName = `${surname} ${name} ${patronymic}`;
  const login = generateLogin();
  const phone = '+7 (900) 000-00-00';

  const registerPayload = {
    role: 'APPLICANT',
    type: 'INDIVIDUAL',
    login,
    fullName,
    email,
    password: '!Test123456',
    phone,
    approval: true
  };

  //const registerRes = await axios.post(`${BASE_URL}/auth/register`, registerPayload);
  //expect(registerRes.status).toBe(201);
  try {
  const registerRes = await axios.post(`${BASE_URL}/auth/register`, registerPayload);
  expect(registerRes.status).toBe(201);

  fs.writeFileSync('temp/user.json', JSON.stringify({
    email,
    password: '!Test123456',
    login,
    mailToken
  }));


  const userId = registerRes.data.id;
  console.log('🆔 ID зарегистрированного пользователя:', userId);

} catch (error: any) {
  console.error('❌ Ошибка регистрации:', error.response?.data || error.message);
  throw error;
}

  console.log('📬 Ожидание письма с кодом подтверждения...');
  const code = await waitForConfirmationCode(email, mailToken, 'register', 60000);
  console.log('✅ Код получен:', code);

  const confirmPayload = {
    email,
    code
  };

  const confirmRes = await axios.post(`${BASE_URL}/auth/confirm`, confirmPayload);
  expect(confirmRes.status).toBe(200); 

  console.log('🎉 Почта подтверждена успешно');
});
