import type { Position, Rect, Spacing } from 'css-box-model';
import type { DraggableDimension, LiftEffect } from '../../../types';
import { negate, subtract } from '../../position';
import { offsetByPosition } from '../../spacing';
import didStartAfterCritical from '../../did-start-after-critical';

export const getCurrentPageBorderBoxCenter = (
  draggable: DraggableDimension,
  afterCritical: LiftEffect,
): Position => {
  // If an item started displaced it is now resting
  // in a non-displaced location
  const original: Position = draggable.page.borderBox.center;
  return didStartAfterCritical(draggable.descriptor.id, afterCritical)
    ? subtract(original, afterCritical.displacedBy.point)
    : original;
};

export const getCurrentPageBorderBox = (
  draggable: DraggableDimension,
  afterCritical: LiftEffect,
): Spacing => {
  // If an item started displaced it is now resting
  // in a non-displaced location
  const original: Rect = draggable.page.borderBox;

  return didStartAfterCritical(draggable.descriptor.id, afterCritical)
    ? offsetByPosition(original, negate(afterCritical.displacedBy.point))
    : original;
};