import { uniq } from "ramda";

export const getNextFocusDown = (
  disableNextFocusDown,
  upperNextFocusDown,
  parentFocus
) => {
  if (disableNextFocusDown) {
    return null;
  }

  if (upperNextFocusDown) {
    return upperNextFocusDown;
  }

  if (parentFocus.nextFocusDown) {
    return parentFocus.nextFocusDown;
  }

  return null;
};

export const getNextFocusUp = (
  disableNextFocusUp,
  upperNextFocusUp,
  parentFocus
) => {
  if (disableNextFocusUp) {
    return null;
  }

  if (upperNextFocusUp) {
    return upperNextFocusUp;
  }

  if (parentFocus.nextFocusUp) {
    return parentFocus.nextFocusUp;
  }

  return null;
};

export const getNextFocusLeft = (
  disableNextFocusLeft,
  upperNextFocusLeft,
  parentFocus
) => {
  if (disableNextFocusLeft) {
    return null;
  }

  if (upperNextFocusLeft) {
    return upperNextFocusLeft;
  }

  if (parentFocus.nextFocusLeft) {
    return parentFocus.nextFocusLeft;
  }

  return null;
};

export const getNextFocusRight = (
  disableNextFocusRight,
  upperNextFocusRight,
  parentFocus
) => {
  if (disableNextFocusRight) {
    return null;
  }

  if (upperNextFocusRight) {
    return upperNextFocusRight;
  }

  if (parentFocus.nextFocusRight) {
    return parentFocus.nextFocusRight;
  }

  return null;
};

const getCount = (element, elements): number =>
  elements.filter((el) => el === element).length;

export const getNonUniqueValues = (ids: string[]): string[] => {
  const uniqIds = uniq(ids);

  return uniqIds.reduce((acc, id) => {
    return getCount(id, ids) >= 2 ? [...acc, id] : acc;
  }, []);
};
