package fr.iutfbleau.papillon;

import javax.swing.*;
import java.awt.*;

/**
 * La classe <code>CouleurList</code> permet d’afficher des couleurs
 * associées à des thèmes dans les listes déroulantes de l’application <b>Papillon</b>.
 * <p>
 * Elle agit comme un <b>renderer</b> personnalisé, affichant un petit carré coloré
 * à côté du nom du thème.
 * </p>
 *
 * @version 1.0
 * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
 */
public class CouleurList extends DefaultListCellRenderer {


    /**
     * Renvoie la couleur correspondant au nom affiché dans le menu déroulant.
     *
     * @param nom le nom du thème (ex. : "Bleu", "Rouge", "Vert", etc.)
     * @return la couleur associée au thème, ou blanc par défaut
     */
    public Color couleurDe(String nom) {
        switch (nom) {
            case "Bleu":  return Color.CYAN;      
            case "Rouge": return Color.RED;
            case "Vert":  return Color.GREEN;
            case "Jaune": return Color.YELLOW;
            case "Rose":  return Color.PINK;
            default:      return Color.WHITE;
        }
    }

    /**
     * Personnalise l’affichage des éléments dans la liste déroulante.
     *
     * @param list la liste affichant les éléments
     * @param value l’élément à afficher
     * @param index l’indice de l’élément dans la liste
     * @param isSelected indique si l’élément est sélectionné
     * @param cellHasFocus indique si l’élément a le focus
     * @return le composant personnalisé pour l’affichage de l’élément
     */
    @Override
    public JLabel getListCellRendererComponent(JList list, Object value, int index,boolean isSelected, boolean cellHasFocus) {

        JLabel lbl = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        if (value != null) {
            String nom = value.toString();
            lbl.setIcon(new ColorIcon(couleurDe(nom), 14, 14));
            lbl.setIconTextGap(8); // petit espace entre le carré et le texte
        }

        return lbl;
    }
}
