const baseLogin = (I) => {
    I.amOnPage('/login')
    I.fillField({id: 'email'}, 'rina.saif221@gmail.com')
    I.fillField({id: 'password'}, '123456ttt')
    I.click({name:'login_btn'})
}
Feature('Профиль')
Scenario('Модалка и ее скрытие о неподтверженном телефона, отправка зпроса с кнопки профиля', async ({I}) => {
    baseLogin(I)
    I.see('Подтвердите свой номер телефона, иначе вы не сможете получать важные уведомления от Attractor School')
    I.click({id: 'hide_phone_modal_btn'})
    I.dontSee('Подтвердите свой номер телефона, иначе вы не сможете получать важные уведомления от Attractor School')
    I.see('подтвердить номер телефона')
    I.click({id: 'verify_phone_btn'})
    I.click({id: 'verify_phone_btn'})
    I.waitForText('Смс с кодом подтверждения отправлено на ваш номер')
    I.click({id:'hide_code_modal_btn'})
    I.dontSee('Смс с кодом подтверждения отправлено на ваш номер')
    I.see('подтвердить номер телефона')
});

Scenario('Подтверждение номера телефона + валидация + модалка', async ({I}) => {
    baseLogin(I)
    I.see('Подтвердите свой номер телефона, иначе вы не сможете получать важные уведомления от Attractor School')
    I.click({id: 'verify_phone_btn_modal'})
    I.waitForText('Смс с кодом подтверждения отправлено на ваш номер')
    I.fillField({id: 'code'}, '5555')
    I.click({id: 'code_submit_btn'})
    I.waitForText('Код подтверждения некорректный')
    I.fillField({id: 'code'},  '0000')
    I.click({id: 'code_submit_btn'})
    I.waitForText('Номер успешно подтвержден')
    I.click({id: 'close_phone_modal_btn'})
    I.refreshPage()
    I.wait(3)
    I.dontSee('Подтвердите свой номер телефона, иначе вы не сможете получать важные уведомления от Attractor School')
});


Scenario('Модалка и ее скрытие о неподтверженном email, отправка зпроса с кнопки профиля', async ({I}) => {
    baseLogin(I)
    I.see('Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School')
    I.click({id: 'hide_email_modal_btn'})
    I.dontSee('Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School')
    I.see('подтвердить email')
    I.click({id: 'verify_email_btn'})
    I.waitForText('Письмо с ссылкой подтверждения отправлено на ваш email')
    I.click({id:'close_email_modal_btn'})
    I.dontSee('Письмо с ссылкой подтверждения отправлено на ваш email')
});

Scenario('Отправка запроса на подтверждение email c модалки', async ({I}) => {
    baseLogin(I)
    I.see('Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School')
    I.click({id: 'verify_email_btn_modal'})
    I.waitForText('Письмо с ссылкой подтверждения отправлено на ваш email')
    I.click({id:'close_email_modal_btn'})
    I.dontSee('Письмо с ссылкой подтверждения отправлено на ваш email')
});

Scenario('Обработка невалидного токена подтверждения email', async ({I}) => {
    baseLogin(I)
    I.waitForText('Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School')
    I.amOnPage('/verify-email?token=wwTIss')
    I.waitForText('Ссылка подтверждения некорректна')
    I.click({id: 'to_profile_btn'})
    I.see('Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School')
});


Scenario('Обработка валидиного токена подтверждения email', async ({I}) => {
    baseLogin(I)
    I.see('Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School')
    I.click({id: 'verify_email_btn_modal'})
    I.waitForText('Письмо с ссылкой подтверждения отправлено на ваш email')
    I.amOnPage('/verify-email?token=0000')
    I.waitForText('Email успешно подтвержден')
    I.click({id: 'to_profile_btn'})
    I.wait(3)
    I.dontSee('Подтвердить email')
});


Scenario('Успешное обновление аватарки', async ({I}) => {
    baseLogin(I)
    I.attachFile({id: 'avatar_update_input'}, 'files_for_tests/some_avatar.png')
    let first_src = await I.grabAttributeFrom({id: 'avatar'}, 'src')
    I.attachFile({id: 'avatar_update_input'}, 'files_for_tests/some_avatar_2.png')
    let second_src = await I.grabAttributeFrom({id: 'avatar'}, 'src')
    if (second_src === first_src) {
        throw new Error()
    }
});

Scenario('Обновление аватарки, валидация неправильный формат', async ({I}) => {
    baseLogin(I)
    I.attachFile({id: 'avatar_update_input'}, 'files_for_tests/fail_avatar.txt')
    I.waitForText('Загрузите правильное изображение. Файл, который вы загрузили, поврежден или не является изображением.')
});

Scenario('Обновление аватарки, валидация пустой файл', async ({I}) => {
    baseLogin(I)
    I.attachFile({id: 'avatar_update_input'}, 'files_for_tests/fail_empty_avatar.txt')
    I.waitForText('Отправленный файл пуст.')
});

let changeFullname = (I, name, surname) => {
    I.click({id: 'edit_profile_btn'})
    I.fillField({id: 'first_name'}, name)
    I.fillField({id: 'last_name'}, surname)
    I.click({id: 'submit_edit_profile_btn'})
    I.waitForText('Данные аккаунта успешно изменены!')
    I.click({id: 'back_to_profile_btn'})
    I.waitForText(`${name} ${surname}`)
}

Scenario('Редактирование профиля без смены email и телефона', async ({I}) => {
    baseLogin(I)
    changeFullname(I, 'Vasiliy', 'Petrov')
    changeFullname(I, 'Zarina', 'Zarina')
});


Scenario('Редактирование профиля со сменой email и телефона', async ({I}) => {
    baseLogin(I)
    I.click({id: 'edit_profile_btn'})
    I.fillField({id: 'phone_number'}, Math.random().toString().substring(5))
    I.fillField({id: 'email'}, 'test_email@gmail.com')
    I.click({id: 'submit_edit_profile_btn'})
    I.waitForText('Данные аккаунта успешно изменены!')
    I.click({id: 'back_to_profile_btn'})
    I.waitForText(`Подтвердите свой номер телефона, иначе вы не сможете получать важные уведомления от Attractor School`)
    I.waitForText(`Подтвердите свой email, иначе вы не сможете получать важные уведомления от Attractor School`)
    I.click({id:'hide_phone_modal_btn'})
    I.click({id:'hide_email_modal_btn'})
    I.click({id: 'edit_profile_btn'})
    I.fillField({id: 'email'}, 'rina.saif221@gmail.com')
    I.click({id: 'submit_edit_profile_btn'})
    I.waitForText('Данные аккаунта успешно изменены!')
});

Scenario('Редактирование профиля со сменой email и телефона', async ({I}) => {
    baseLogin(I)
    I.click({id: 'edit_profile_btn'})
    I.click({id: 'change_password_btn'})
    I.fillField({id: 'old_password'}, '1234567890')
    I.fillField({id:'password'}, '123456ttt')
    I.fillField({id:'confirm_password'}, '123456ttt')
    I.waitForText('Введеный вами пароль не совпадает с ранее установленным')
    I.fillField({id: 'old_password'}, '123456ttt')
    I.waitForText('Пароль успешно изменен!')
});
