/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 */

import {ConcretePluginDetails} from 'flipper-common';
import semver from 'semver';
import isPluginCompatible from './isPluginCompatible';

export function isPluginVersionMoreRecent(
  versionDetails: ConcretePluginDetails,
  otherVersionDetails: ConcretePluginDetails,
) {
  const isPlugin1Compatible = isPluginCompatible(versionDetails);
  const isPlugin2Compatible = isPluginCompatible(otherVersionDetails);

  // prefer compatible plugins
  if (isPlugin1Compatible && !isPlugin2Compatible) return true;
  if (!isPlugin1Compatible && isPlugin2Compatible) return false;

  // prefer plugins with greater version
  if (semver.gt(versionDetails.version, otherVersionDetails.version)) {
    return true;
  }
  if (
    semver.eq(versionDetails.version, otherVersionDetails.version) &&
    versionDetails.isActivatable &&
    !otherVersionDetails.isActivatable
  ) {
    // prefer locally available versions to the versions available remotely on marketplace
    return true;
  }
  return false;
}

export default isPluginVersionMoreRecent;
