import getBasePlacement from "./getBasePlacement.js";
import getVariation from "./getVariation.js";
import getMainAxisFromPlacement from "./getMainAxisFromPlacement.js";
import {
    top,
    right,
    bottom,
    left,
    start,
    end
} from "../enums.js";
export default function computeOffsets(_ref) {
    var reference = _ref.reference,
        element = _ref.element,
        placement = _ref.placement;
    var basePlacement = placement ? getBasePlacement(placement) : null;
    var variation = placement ? getVariation(placement) : null;
    var commonX = reference.x + reference.width / 2 - element.width / 2;
    var commonY = reference.y + reference.height / 2 - element.height / 2;
    var offsets;

    switch (basePlacement) {
        case top:
            offsets = {
                x: commonX,
                y: reference.y - element.height
            };
            break;

        case bottom:
            offsets = {
                x: commonX,
                y: reference.y + reference.height
            };
            break;

        case right:
            offsets = {
                x: reference.x + reference.width,
                y: commonY
            };
            break;

        case left:
            offsets = {
                x: reference.x - element.width,
                y: commonY
            };
            break;

        default:
            offsets = {
                x: reference.x,
                y: reference.y
            };
    }

    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;

    if (mainAxis != null) {
        var len = mainAxis === 'y' ? 'height' : 'width';

        switch (variation) {
            case start:
                offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
                break;

            case end:
                offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
                break;

            default:
        }
    }

    return offsets;
}