/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

/**
 * Compares 2 sets of grid fragments to each other and checks if they have the same
 * general geometry.
 * This means that things like areas, area names or line names are ignored.
 * This only checks if the 2 sets of fragments have as many fragments, as many lines, and
 * that those lines are at the same distance.
 *
 * @param  {Array} fragments1
 *         A list of gridFragment objects.
 * @param  {Array} fragments2
 *         Another list of gridFragment objects to compare to the first list.
 * @return {boolean}
 *         True if the fragments are the same, false otherwise.
 */
function compareFragmentsGeometry(fragments1, fragments2) {
  // Compare the number of fragments.
  if (fragments1.length !== fragments2.length) {
    return false;
  }

  // Compare the number of areas, rows and columns.
  for (let i = 0; i < fragments1.length; i++) {
    if (
      fragments1[i].cols.lines.length !== fragments2[i].cols.lines.length ||
      fragments1[i].rows.lines.length !== fragments2[i].rows.lines.length
    ) {
      return false;
    }
  }

  // Compare the offset of lines.
  for (let i = 0; i < fragments1.length; i++) {
    for (let j = 0; j < fragments1[i].cols.lines.length; j++) {
      if (
        fragments1[i].cols.lines[j].start !== fragments2[i].cols.lines[j].start
      ) {
        return false;
      }
    }
    for (let j = 0; j < fragments1[i].rows.lines.length; j++) {
      if (
        fragments1[i].rows.lines[j].start !== fragments2[i].rows.lines[j].start
      ) {
        return false;
      }
    }
  }

  return true;
}

module.exports.compareFragmentsGeometry = compareFragmentsGeometry;
