const Utils = require('./Utils');
const testIDs = require('../playground/src/testIDs');
const Android = require('./AndroidUtils');

const { elementByLabel, elementById, sleep } = Utils;

describe(':android: screen stack', () => {
  beforeEach(async () => {
    await device.relaunchApp();
  });

  test('override hardware back button', async () => {
    await elementByLabel('BACK HANDLER').tap();
    await expect(elementByLabel('Back Handler Screen')).toBeVisible();

    await elementByLabel('ADD BACK HANDLER').tap();
    Android.pressBack();
    await sleep(100);
    await expect(elementByLabel('Back Handler Screen')).toBeVisible();

    await elementByLabel('REMOVE BACK HANDLER').tap();
    Android.pressBack();
    await sleep(100);
    await expect(elementByLabel('React Native Navigation!')).toBeVisible();
  });

  test('override hardware back button in modal with stack', async () => {
    await elementByLabel('BACK HANDLER').tap();
    await expect(elementByLabel('Back Handler Screen')).toBeVisible();

    await elementByLabel('SHOW MODAL WITH STACK').tap();
    await elementByLabel('ADD BACK HANDLER').tap();

    // Back is handled in Js
    Android.pressBack();
    await sleep(100);
    await expect(elementByLabel('Back button pressed!')).toBeVisible();

    // pop
    await elementByLabel('REMOVE BACK HANDLER').tap();
    Android.pressBack();
    await sleep(100);
    await expect(elementByLabel('Back Handler Screen')).toBeVisible();

    // modal dismissed
    Android.pressBack();
    await sleep(100);
    await expect(elementByLabel('Back Handler Screen')).toBeVisible();

    // main
    Android.pressBack();
    await sleep(100);
    await expect(elementByLabel('React Native Navigation!')).toBeVisible();
  });
});