Source: helpers/getIntervalPermutationsFromNoteNames.js

/* mod */
import getInterval from './getInterval';

/**
 * Get all possible interval permutations between these notes. Helpful to be able to guess scale
 * @function
 * @name getIntervalPermutationsFromNoteNames
 * @param {array} noteNames - Without octave
 * @example
 * getIntervalPermutationsFromNoteNames(['A', 'B', 'C'])
 *
 * //  Returns { firstNoteName: 'A', intervals: [0, 9, 10], guessedScales: [] },
 * //  { firstNoteName: 'B', intervals: [0, 2, 11], guessedScales: [] },
 * //  { firstNoteName: 'C', intervals: [0, 1, 3], guessedScales: [] },
 * @return {array} intervalPermutations -
 * [{firstNoteName: string, intervals: number, guessedScales: array}]
 */
const getIntervalPermutationsFromNoteNames = (noteNames) => {
  const intervalsPermutations = [];
  for (let i = 0; i < noteNames.length; i += 1) {
    const intervals = [0];
    const firstNoteName = noteNames[i];
    for (let j = 0; j < noteNames.length; j += 1) {
      if (j !== i) {
        const interval = getInterval(firstNoteName, noteNames[j]);
        intervals.push(interval);
      }
    }
    intervals.sort((a, b) => (a - b));
    const noteIntervals = {
      firstNoteName, // /: firstNoteName.substring(0, firstNoteName.length - 1),
      intervals,
      guessedScales: [],
    };
    intervalsPermutations.push(noteIntervals);
  }
  return intervalsPermutations;
};
export default getIntervalPermutationsFromNoteNames;