/* eslint-disable import/no-unused-modules */
import { send } from 'loot-core/src/platform/client/fetch';

function _authorize(pushModal, plaidToken, { onSuccess, onClose }) {
  pushModal('plaid-external-msg', {
    onMoveExternal: async () => {
      let token = await send('create-web-token');
      let url = 'http://link.actualbudget.com/?token=' + token;
      // let url = 'http://localhost:8080/?token=' + token;
      if (plaidToken) {
        url = url + '&plaidToken=' + plaidToken;
      }
      window.Actual.openURLInBrowser(url);

      let { error, data } = await send('poll-web-token', { token });

      return { error, data };
    },

    onClose,
    onSuccess,
  });
}

export async function authorizeBank(pushModal, { upgradingId } = {}) {
  _authorize(pushModal, null, {
    onSuccess: async data => {
      pushModal('select-linked-accounts', {
        institution: data.metadata.institution,
        publicToken: data.publicToken,
        accounts: data.metadata.accounts,
        upgradingId,
      });
    },
  });
}

export async function reauthorizeBank(pushModal, bankId, onSuccess) {
  let { linkToken } = await send('make-plaid-public-token', {
    bankId,
  });

  // We don't do anything with the error right now
  if (!linkToken) {
    return false;
  }

  // When the modal is closed here, always try to re-sync the account
  // by calling `onSuccess`
  _authorize(pushModal, linkToken, { onSuccess, onClose: onSuccess });
  return true;
}