/**
 * Вычисляет пересеклись ли два объекта по ААBB формуле в системе координат где ось X идет справа налево, ось Y идет сверху вних
 * @param {Object} firstObject - первый объект
 * @param {number} firstObject.left - Min X координата первого объекта
 * @param {number} firstObject.right - Max X координата первого объекта
 * @param {number} firstObject.top - Min Y координата первого объекта (ось смотрит вниз)
 * @param {number} firstObject.bottom - Max Y координата первого объекта
 * @param {Object} secondObject - второй объект
 * @param {number} secondObject.left - Min X координата второго объекта
 * @param {number} secondObject.right - Max X координата второго объекта
 * @param {number} secondObject.top - Min Y координата второго объекта (ось смотрит вниз)
 * @param {number} secondObject.bottom - Max Y координата второго объекта
 * @returns {boolean}
 */
export function calculateAABBCollision(firstObject, secondObject) {
  try {
    const coordinates = [
      firstObject.left,
      firstObject.right,
      firstObject.top,
      firstObject.bottom,
      secondObject.left,
      secondObject.right,
      secondObject.top,
      secondObject.bottom,
    ];

    if (coordinates.some((element) => typeof element !== 'number')) {
      throw new Error('Координаты должны являться числовыми значениями');
    }

    if (
      firstObject.left > firstObject.right ||
      firstObject.top > firstObject.bottom ||
      secondObject.left > secondObject.right ||
      secondObject.top > secondObject.bottom
    ) {
      throw new Error('Координаты должны быть корректными');
    }

    return (
      firstObject.left <= secondObject.right &&
      firstObject.right >= secondObject.left &&
      firstObject.top <= secondObject.bottom &&
      firstObject.bottom >= secondObject.top
    );
  } catch (err) {
    console.error(err);
    return null;
  }
}
