import { createSelector } from "reselect";

export const _selectState = state => state.app || {};

export const selectPlatform = createSelector(
  _selectState,
  state => state.platform
);

export const selectUpdateUrl = createSelector(selectPlatform, platform => {
  switch (platform) {
    case "darwin":
      return "https://lbry.io/get/lbry.dmg";
    case "linux":
      return "https://lbry.io/get/lbry.deb";
    case "win32":
      return "https://lbry.io/get/lbry.exe";
    default:
      throw "Unknown platform";
  }
});

export const selectVersion = createSelector(_selectState, state => {
  return state.version;
});

export const selectUpgradeFilename = createSelector(
  selectPlatform,
  selectVersion,
  (platform, version) => {
    switch (platform) {
      case "darwin":
        return `LBRY_${version}.dmg`;
      case "linux":
        return `LBRY_${version}_amd64.deb`;
      case "win32":
        return `LBRY_${version}.exe`;
      default:
        throw "Unknown platform";
    }
  }
);

export const selectCurrentModal = createSelector(
  _selectState,
  state => state.modal
);

export const selectDownloadProgress = createSelector(
  _selectState,
  state => state.downloadProgress
);

export const selectDownloadComplete = createSelector(
  _selectState,
  state => state.upgradeDownloadCompleted
);

export const selectUpgradeSkipped = createSelector(
  _selectState,
  state => state.upgradeSkipped
);

export const selectUpgradeDownloadPath = createSelector(
  _selectState,
  state => state.downloadPath
);

export const selectUpgradeDownloadItem = createSelector(
  _selectState,
  state => state.downloadItem
);

export const selectModalProps = createSelector(
  _selectState,
  state => state.modalProps
);

export const selectDaemonReady = createSelector(
  _selectState,
  state => state.daemonReady
);

export const selectDaemonVersionMatched = createSelector(
  _selectState,
  state => state.daemonVersionMatched
);

export const selectSnackBar = createSelector(
  _selectState,
  state => state.snackBar || {}
);

export const selectSnackBarSnacks = createSelector(
  selectSnackBar,
  snackBar => snackBar.snacks || []
);

export const selectBadgeNumber = createSelector(
  _selectState,
  state => state.badgeNumber
);

export const selectCurrentLanguage = createSelector(
  _selectState,
  () => app.i18n.getLocale() || "en"
);

export const selectVolume = createSelector(_selectState, state => state.volume);