package be.msyben.vinylManager.gui.list.leftList;

import be.msyben.vinylManager.entities.Album;
import java.awt.Component;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe abstraite à étendre pour une "liste de gauche".
 * @author Mathieu Syben
 */
public abstract class AbstractLeftList {

    /** Les listeners */
    private List<LeftListListener> listListeners = new ArrayList<>();

    /**
     * Met à jour la liste.
     */
    public abstract void updateList();
    /**
     * Met à jour la liste et met le focus sur l'album sélectionné.
     * @param selectedAlbum l'album sélectionné.
     */
    public abstract void updateList(Album selectedAlbum);

    /**
     * Met à jour après une suppression.
     * @param deletedAlbum L'album supprimé.
     */
    public abstract void updateListAfterDeleteAlbum(Album deletedAlbum);

    /**
     * Récupère le composant à afficher.
     * @return le composant à afficher.
     */
    public abstract Component getComponent();

    /**
     * Permet de définir si la liste est enabled ou non.
     * @param enabled enabled ou pas.
     */
    public abstract void setEnabled(boolean enabled);

    /**
     * Ajoute un listener à la liste.
     * @param listener Le listener à ajouter.
     */
    public void addListListener(LeftListListener listener) {
        listListeners.add(listener);
    }

    /**
     * Choix fait dans la liste. La liste d'albums correspondant à ce choix est retournée.
     * @param albums Tous les albums correspondant au choix.
     */
    protected void selection(List<Album> albums) {
        for (LeftListListener listener : listListeners) {
            listener.selection(albums);
        }
    }
    
    /**
     * Permet de récupérer le titre de la liste.
     * @return le titre de la liste.
     */
    public abstract String getTitle();
}
