import { Ref } from "vue";
// 计算各个方向位置
const postionFns: any = {
  top(
    el: HTMLElement,
    popper: HTMLElement,
    innnerPosition: Ref,
    called: boolean
  ) {
    let { top, left, bottom } = el.getBoundingClientRect();
    if (
      (top = top - popper.offsetHeight - 6) < 0 &&
      bottom > popper.offsetHeight
    ) {
      innnerPosition.value = "bottom";
      top = bottom;
    }
    return {
      top: `${top}px`,
      left: `${left - (popper.offsetWidth - el.offsetWidth) / 2}px`,
    };
  },
  bottom(
    el: HTMLElement,
    popper: HTMLElement,
    innnerPosition: Ref,
    called: boolean
  ) {
    let { top, left, bottom } = el.getBoundingClientRect();
    if (window.innerHeight - bottom < popper.offsetHeight + 6) {
      innnerPosition.value = "top";
      bottom = top - popper.offsetHeight - 6;
    }
    return {
      top: `${bottom}px`,
      left: `${left - (popper.offsetWidth - el.offsetWidth) / 2}px`,
    };
  },
  left(
    el: HTMLElement,
    popper: HTMLElement,
    innnerPosition: Ref,
    called: boolean
  ) {
    let { top, left, right } = el.getBoundingClientRect();
    left = left - popper.offsetWidth - 6;
    if (left < 0) {
      innnerPosition.value = "right";
      left = right;
    }
    return {
      top: `${top - (popper.offsetHeight - el.offsetHeight) / 2}px`,
      left: `${left}px`,
    };
  },
  right(
    el: HTMLElement,
    popper: HTMLElement,
    innnerPosition: Ref,
    called: boolean
  ) {
    let { top, left, right } = el.getBoundingClientRect();
    if (window.innerWidth < right + popper.offsetWidth + 6) {
      innnerPosition.value = "left";
      right = left - popper.offsetWidth - 6;
    }
    return {
      top: `${top - (popper.offsetHeight - el.offsetHeight) / 2}px`,
      left: `${right}px`,
    };
  },
};
export default postionFns;
