import { Dir, Point } from './common'

export function computeContextMenuPosition(args: {
  clickPos: Point
  menuRect: DOMRect
  viewport: { w: number; h: number }
  margin?: number
  containerRect?: DOMRect | null
}): { safePos: Point; dropDir: Dir } {
  const { clickPos: pos, menuRect: rect, viewport } = args
  const margin = args.margin ?? 8
  const left = Math.max(margin, Math.min(pos.x, viewport.w - rect.width - margin))
  const vh = viewport.h
  let top = pos.y
  let dir: Dir = Dir.Down

  const spaceBelow = vh - pos.y

  if (spaceBelow < rect.height * 1.8) {
    top = Math.max(margin, pos.y - rect.height - margin)
    dir = Dir.Up
  } else {
    top = Math.max(margin, Math.min(pos.y, vh - rect.height - margin))
  }

  return { safePos: { x: left, y: top }, dropDir: dir }
}
