package fr.iutfbleau.sae.mpif;

import java.util.Comparator; 
import java.util.Map;
/**
 * 
 * Comparateur utilisé pendant la reconstruction des codes canoniques.
 * Il permet de trier les paires (symbole, longueur) dans le bon ordre
 * avant de générer les codes binaires.
 *
 * Le tri se fait en deux étapes :
 * - d'abord par la longueur du code (ordre croissant)
 * - si deux longueurs sont identiques, on trie par le symbole lui-même
 *
 * Ce comparateur est utilisé dans la méthode rebuildCanonical du PIFReader.
 */
public class ComparateurEntreeCanonique implements Comparator<Map.Entry<Integer, Integer>> {
    
    /**
     * Compare deux entrées contenant chacune un symbole et sa longueur de code.
     * Le but est de les classer dans l'ordre nécessaire pour produire
     * les codes canoniques dans l'ordre standard.
     *
     * @param entree1 première paire (symbole, longueur)
     * @param entree2 deuxième paire (symbole, longueur)
     * @return un entier indiquant si la première entrée doit être placée
     *         avant, au même niveau ou après la seconde
     */
    @Override
    public int compare(Map.Entry<Integer, Integer> entree1, Map.Entry<Integer, Integer> entree2) {
        int comparaisonLongueur = entree1.getValue().compareTo(entree2.getValue());
        
        // Si les longueurs sont différentes, c’est le critère principal
        if (comparaisonLongueur != 0) {
            return comparaisonLongueur;
        }
        
        // Sinon, on départage avec le symbole (la clé)
        return entree1.getKey().compareTo(entree2.getKey());
    }
}
