import { BrowserWindow } from 'electron';
import { start as startUpdater, stop as stopUpdater } from './updater';
import { LoggerType, MessagesType } from './common';
import { UserConfig } from '../node/config/user_config';

let initialized = false;
let localUserConfig: UserConfig;

export async function start(
  getMainWindow: () => BrowserWindow | null,
  userConfig: UserConfig,
  messages: MessagesType,
  logger?: LoggerType | null
) {
  if (initialized) {
    throw new Error('updater/start: Updates have already been initialized!');
  }

  if (!userConfig) {
    throw new Error('updater/start: userConfig is needed!');
  }

  if (!messages) {
    throw new Error('updater/start: Must provide messages!');
  }
  if (!logger) {
    throw new Error('updater/start: Must provide logger!');
  }
  initialized = true;
  localUserConfig = userConfig; // reused below

  if (autoUpdateDisabled()) {
    logger.info('updater/start: Updates disabled - not starting new version checks');

    return;
  }

  await startUpdater(getMainWindow, messages, logger);
}

export function stop() {
  if (initialized) {
    stopUpdater();
    initialized = false;
  }
}

function autoUpdateDisabled() {
  // We need to ensure that if auto update is not present in the user config then we assume it is on by default
  const userSetting = localUserConfig.get('autoUpdate');
  const autoUpdate = typeof userSetting !== 'boolean' || userSetting;

  return (
    process.mas || // From Electron: Mac App Store build
    // tslint:disable-next-line: no-backbone-get-set-outside-model
    !autoUpdate // User setting
  );
}