import extension from 'extensionizer'
import log from 'loglevel'

const returnToOnboardingInitiatorTab = async (onboardingInitiator) => {
  const tab = await new Promise((resolve) => {
    extension.tabs.update(
      onboardingInitiator.tabId,
      { active: true },
      // eslint-disable-next-line no-shadow
      (tab) => {
        if (tab) {
          resolve(tab)
        } else {
          // silence console message about unchecked error
          if (extension.runtime.lastError) {
            log.debug(extension.runtime.lastError)
          }
          resolve()
        }
      },
    )
  })

  if (tab) {
    window.close()
  } else {
    // this case can happen if the tab was closed since being checked with `extension.tabs.get`
    log.warn(
      `Setting current tab to onboarding initiator has failed; falling back to redirect`,
    )
    window.location.assign(onboardingInitiator.location)
  }
}

export const returnToOnboardingInitiator = async (onboardingInitiator) => {
  const tab = await new Promise((resolve) => {
    // eslint-disable-next-line no-shadow
    extension.tabs.get(onboardingInitiator.tabId, (tab) => {
      if (tab) {
        resolve(tab)
      } else {
        // silence console message about unchecked error
        if (extension.runtime.lastError) {
          log.debug(extension.runtime.lastError)
        }
        resolve()
      }
    })
  })

  if (tab) {
    await returnToOnboardingInitiatorTab(onboardingInitiator)
  } else {
    window.location.assign(onboardingInitiator.location)
  }
}