package fr.iutfbleau.projetIHM2022FI2.API;
import java.util.*;
/**
 * Une demande de changement de groupe
 * concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B.
 * 
 */

public interface Changement extends MonPrint {

    /**
     * permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
     * @return l'identifiant.
     */
    public int getId();

    /**
     * permet de récupérer le groupe de depart
     * @return ce groupe.
     */
    public Groupe getA();

    /**
     * permet de récupérer le groupe d'arrivée
     * @return ce groupe.
     */
    public Groupe getB();

    /**
     * permet de récupérer l'étudiant demandant le changement
     * @return cet étudiant
     */
    public Etudiant getEtu();

    
    /**
     * @see MonPrint
     * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
     *
     * NB2. On ne peut pas utiliser le toString de Objects
     * https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan
     */ 
    public default String monPrint() {
        StringBuilder sb = new StringBuilder();
        sb.append("Changement de " + this.getEtu().monPrint() + " depuis le groupe " + this.getA().getName() + " vers le groupe " + this.getB().getName());
        return sb.toString();
    }

}
