import { Application } from 'spectron';

import findAsync from './find-async';

interface WaitUntilOpenedOptions {modalName?: string, title?: string}
export const waitUntilOpened = async (app, { modalName, title }: WaitUntilOpenedOptions) => {
  if (modalName) {
    const modal = await app.client.react$(modalName);
    await modal.waitForDisplayed();
  } else {
    await app.client.waitUntilTextExists('div.modal__header__children', title);
  }
};

export const close = async (app: Application, modalName?: string) => {
  let modal;
  if (modalName) {
    modal = await app.client.react$(modalName);
  } else {
    const modals = await app.client.react$$('Modal');
    modal = await findAsync(modals, m => m.isDisplayed());
  }

  await modal.$('button.modal__close-btn').then(e => e.click());
};

export const clickModalFooterByText = async (app, text) => {
  const btn = await app.client
    .$('.modal[aria-hidden=false] .modal__footer')
    .then(e => e.$(`button*=${text}`));
  await btn.waitForClickable();
  await btn.click();
};

export const typeIntoModalInput = async (app, text) => {
  const input = await app.client.$('.modal input');
  await input.waitUntil(() => input.isFocused());
  await input.keys(text);
};
