/** @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})
}
