/** @babel */

import { Disposable, CompositeDisposable } from 'atom'
import VIEW_URI from './view-uri'

let disposables = null

export function activate () {
  disposables = new CompositeDisposable()

  disposables.add(
    atom.workspace.addOpener(uri => {
      if (uri === VIEW_URI) {
        return deserializeIncompatiblePackagesComponent()
      }
    })
  )

  disposables.add(
    atom.commands.add('atom-workspace', {
      'incompatible-packages:view': () => {
        atom.workspace.open(VIEW_URI)
      }
    })
  )
}

export function deactivate () {
  disposables.dispose()
}

export function consumeStatusBar (statusBar) {
  let incompatibleCount = 0
  for (let pack of atom.packages.getLoadedPackages()) {
    if (!pack.isCompatible()) incompatibleCount++
  }

  if (incompatibleCount > 0) {
    let icon = createIcon(incompatibleCount)
    let tile = statusBar.addRightTile({ item: icon, priority: 200 })
    icon.element.addEventListener('click', () => {
      atom.commands.dispatch(icon.element, 'incompatible-packages:view')
    })
    disposables.add(new Disposable(() => tile.destroy()))
  }
}

export function deserializeIncompatiblePackagesComponent () {
  const IncompatiblePackagesComponent = require('./incompatible-packages-component')
  return new IncompatiblePackagesComponent(atom.packages)
}

function createIcon (count) {
  const StatusIconComponent = require('./status-icon-component')
  return new StatusIconComponent({ count })
}
