// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

import { Environment, getEnvironment } from '../environment';
import { isInPast } from './timestamp';
import * as log from '../logging/log';

const ONE_DAY_MS = 86400 * 1000;
const NINETY_ONE_DAYS = 91 * ONE_DAY_MS;
const THIRTY_ONE_DAYS = 31 * ONE_DAY_MS;

export function hasExpired(): boolean {
  const { getExpiration } = window;

  let buildExpiration = 0;

  try {
    buildExpiration = parseInt(getExpiration(), 10);
    if (buildExpiration) {
      log.info('Build expires: ', new Date(buildExpiration).toISOString());
    }
  } catch (e) {
    log.error('Error retrieving build expiration date', e.stack);

    return true;
  }

  if (getEnvironment() === Environment.Production) {
    const safeExpirationMs = window.Events.getAutoDownloadUpdate()
      ? NINETY_ONE_DAYS
      : THIRTY_ONE_DAYS;

    const buildExpirationDuration = buildExpiration - Date.now();
    const tooFarIntoFuture = buildExpirationDuration > safeExpirationMs;

    if (tooFarIntoFuture) {
      log.error(
        'Build expiration is set too far into the future',
        buildExpiration
      );
    }

    return tooFarIntoFuture || isInPast(buildExpiration);
  }

  return buildExpiration !== 0 && isInPast(buildExpiration);
}
