package fr.iutfbleau.sae.mhuffman;

import java.util.Comparator;
import java.util.Map;

/**
 * 
 * Comparateur utilisé lors de la génération des codes canoniques.
 * Il permet de trier des couples (symbole, code Huffman sous forme de chaîne).
 *
 * Le tri se fait dans cet ordre :
 * 1. Par longueur du code (du plus court au plus long)
 * 2. En cas d'égalité, par ordre croissant des symboles
 */
public class ComparateurCanonique implements Comparator<Map.Entry<Integer, String>> {

    /**
     * Compare deux entrées contenant un symbole et son code Huffman.
     *
     * @param entree1 première entrée à comparer
     * @param entree2 deuxième entrée à comparer
     * @return un entier négatif si entree1 doit venir avant entree2,
     *         positif si elle doit venir après,
     *         et zéro si elles sont équivalentes selon le tri.
     */
    @Override
    public int compare(Map.Entry<Integer, String> entree1, Map.Entry<Integer, String> entree2) {

        int longueur1 = entree1.getValue().length();
        int longueur2 = entree2.getValue().length();

        // On compare d'abord la longueur des codes
        if (longueur1 != longueur2) {
            return longueur1 - longueur2;
        }

        // Si les longueurs sont identiques, on trie par symbole
        return entree1.getKey() - entree2.getKey();
    }
}
