import { isPresent } from './objects';

/**
 * A utiliser dans un comparateur, compare et place null et undefined à la fin
 *
 * @param {Any} a - élément à comparer
 * @param {Any} b - élément à comparer
 * @returns valeur négative si a est placé avant b, positive si b est placé avant a, 0 sinon
 */
export const comparer = (a, b) => {
    const isA = isPresent(a);
    const isB = isPresent(b);
    if (isA && isB) {
        return typeof a === 'string' ? a.localeCompare(b) : a - b;
    }
    if (isA) {
        return -1;
    }
    if (isB) {
        return 1;
    }
    return 0;
};

/**
 * A utiliser dans un comparateur, compare et place null et undefined à la fin
 *
 * @param {Any} name1 - élément à comparer
 * @param {Any} name2 - élément à comparer
 * @returns valeur négative si name1 est placé avant name2, positive si name2 est placé avant name1, en fonction du deuxième mot dans le nom si c'est un nom composé
 */
export const nameComparator = (name1,name2) => {
    const words = name1.split(' ');
    const words2 = name2.split(' ');
    
    const i = (chain) => {
      return (chain.length>2 ? 1 : 0)}
  
    if (name1 === null) {
      return 1;
    }
    if (name2 === null) {
      return -1;
    }
    return words[i(words)].localeCompare(words2[i(words2)])
}
