// @flow
import { type Change } from "slate";

import { TablePosition } from "../utils";
import type Options from "../options";

/**
 * Move selection to {x,y}
 */
function moveSelection(
  opts: Options,
  change: Change,
  x: number,
  y: number
): Change {
  const { value } = change;
  const { startKey } = value;
  const pos = TablePosition.create(opts, value.document, startKey);

  if (!pos.isInCell()) {
    throw new Error("moveSelection can only be applied from within a cell");
  }

  const { table } = pos;
  const row = table.nodes.get(y);
  const cell = row.nodes.get(x);

  return change.collapseToStartOf(cell);
}

export default moveSelection;
