import { isNil, pathOr } from "ramda";
import { useFocusable } from "@applicaster/zapp-react-native-ui-components/Components/Focusable/index.android";

import {
  getNextFocusRight,
  getNextFocusLeft,
  getNextFocusDown,
  getNextFocusUp,
} from "./utils";

export const useParentFocus = ({
  parentFocused,
  disableNextFocusUp,
  disableNextFocusRight,
  disableNextFocusDown,
  disableNextFocusLeft,
  parentNextFocusUp,
  parentNextFocusRight,
  parentNextFocusDown,
  parentNextFocusLeft,
}) => {
  const parentFocus = useFocusable() || {};

  const focused = isNil(parentFocused)
    ? pathOr(false, ["focused"], parentFocus)
    : parentFocused;

  const nextFocusRight = getNextFocusRight(
    disableNextFocusRight,
    parentNextFocusRight,
    parentFocus
  );

  const nextFocusLeft = getNextFocusLeft(
    disableNextFocusLeft,
    parentNextFocusLeft,
    parentFocus
  );

  const nextFocusDown = getNextFocusDown(
    disableNextFocusDown,
    parentNextFocusDown,
    parentFocus
  );

  const nextFocusUp = getNextFocusUp(
    disableNextFocusUp,
    parentNextFocusUp,
    parentFocus
  );

  return {
    focused,
    nextFocusDown,
    nextFocusUp,
    nextFocusLeft,
    nextFocusRight,
  };
};
