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.com/get/lbry.dmg';
      case 'linux':
        return 'https://lbry.com/get/lbry.deb';
      case 'win32':
        return 'https://lbry.com/get/lbry.exe';
      default:
        throw Error('Unknown platform');
    }
  }
);

export const selectHasClickedComment = createSelector(
  selectState,
  state => state.hasClickedComment
);

export const selectRemoteVersion = createSelector(
  selectState,
  state => state.remoteVersion
);

export const selectIsUpgradeAvailable = createSelector(
  selectState,
  state => state.isUpgradeAvailable
);

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

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

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

export const selectIsUpgradeSkipped = createSelector(
  selectState,
  state => state.isUpgradeSkipped
);

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

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

export const selectAutoUpdateDownloaded = createSelector(
  selectState,
  state => state.autoUpdateDownloaded
);

export const selectAutoUpdateDeclined = createSelector(
  selectState,
  state => state.autoUpdateDeclined
);

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

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

export const selectMute = createSelector(
  selectState,
  state => state.muted
);

export const selectUpgradeTimer = createSelector(
  selectState,
  state => state.checkUpgradeTimer
);

export const selectModal = createSelector(
  selectState,
  state => {
    if (!state.modal) {
      return null;
    }

    return {
      id: state.modal,
      modalProps: state.modalProps,
    };
  }
);

export const selectSearchOptionsExpanded = createSelector(
  selectState,
  state => state.searchOptionsExpanded
);

export const selectWelcomeVersion = createSelector(
  selectState,
  state => state.welcomeVersion
);

export const selectAllowAnalytics = createSelector(
  selectState,
  state => state.allowAnalytics
);

export const selectScrollStartingPosition = createSelector(
  selectState,
  state => state.currentScroll
);

export const selectIsPasswordSaved = createSelector(
  selectState,
  state => state.isPasswordSaved
);