package environnements;

import java.io.Serializable;
import types.Effect;

public interface Grid extends Serializable {
    /**
     * Retourne le nom de la grille.
     * Par défaut, il convertit la représentation toString de l'objet en minuscules.
     *
     * @return le nom de la grille.
     */
    public default String getName() {
        return this.toString().toLowerCase();
    }

    /**
     * Retourne l'effet par défaut associé à la grille.
     * Par défaut, il retourne null.
     *
     * @return l'effet par défaut ou null.
     */
    public default Effect get() {
        return null;
    }

    /**
     * Met à jour la représentation du code de la grille sous forme de chaîne.
     *
     * @param textCode le nouveau code de chaîne à définir.
     */
    public void updateStringCode(String textCode);

    /**
     * Retourne la représentation du code de la grille sous forme de chaîne.
     *
     * @return le code de chaîne.
     */
    public String getStringCode();

    /**
     * Retourne un tableau de toutes les valeurs possibles de la grille.
     * Cette méthode peut être utilisée de manière similaire à la méthode values d'une énumération.
     *
     * @return un tableau de toutes les valeurs de la grille.
     */
    public Grid[] getValues();
}