package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;

import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.MP.EtudiantNP;
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListenerNouveauEtu;
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.SelecteurEtudiant;

import java.util.Set;
import java.awt.GridLayout;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class FenetreSelectionEtu extends JPanel{
	// liste des étudiants à ajouter
	private Set<Etudiant> liste;
	// liste de tous les étudiants
	private Set<Etudiant> etu;

		
		/**
		 * Constructeur de l'affichage de la selection des étudiants
		 * @param g le groupe
		 * @param liste la liste des étudiants à ajouter
		 * @param supression savoir si il faut supprimer les étudiants du groupe de la liste
		 * @param etu0 la liste de tous les
		 */
    public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste, boolean supression, Set<Etudiant> etu0){
        super();
        this.etu=etu0;
        if(supression==true){
            for(Etudiant e:g.getEtudiants()){
                for(Etudiant et:etu){
                    if(e.getId()==et.getId()){
                        etu.remove(et);
                        break;
                    }
                }
            }
        }
        this.liste=liste;
        this.draw();
    }
/**
 * Ajoute un étudiant à la sélection
 * @param index l'index de l'étudiant
 */
    public void addList(int index){
        int i=0;
        for(Etudiant e:this.etu){
            if(i==index){
                this.liste.add(e);
                return;
            }
            i++;
        }
    }
/**
 * Retire un étudiant de la sélection
 * @param index l'index de l'étudiant
 */
    public void removeList(int index){
        int i=0;
        for(Etudiant e:this.etu){
            if(i==index){
                this.liste.remove(e);
                return;
            }
            i++;
        }
    }
/**
 * Ajoute un étudiant à la liste de tous les étudiants
 * @param nom le nom de l'étudiant
 * @param prenom le prénom de l'étudiant
 */
    public void addEtudiant(String nom, String prenom){
        if(nom.length()==0 || prenom.length()==0){
            JOptionPane.showMessageDialog(this, "le nom/prenom ne peut pas être null");
            return;
        }
        this.etu.add(new EtudiantNP(nom, prenom));
        this.removeAll();
        this.draw();
        this.revalidate();
    }
/**
 * gère l'affichage de la sélection
 */
    private void draw(){
        this.setLayout(new GridLayout(this.etu.size()/5+1, 4));
        int index=0;
        for(Etudiant e:etu){
            JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId());
            lab.addMouseListener(new SelecteurEtudiant(index, this));
            this.add(lab);
            index++;
        }
        JButton nouveau=new JButton("Nouveau +");
        nouveau.setBackground(Color.RED);
        nouveau.addActionListener(new ActionListenerNouveauEtu(this));
        JButton all=new JButton("tous");
        this.add(all);
        all.addActionListener(new ActionListenerNouveauEtu(this));
        this.add(nouveau);
    }
/**
 * Ajoute tous les étudiants à la liste des étudiants sélectionnés
 */
    public void addAll(){
        if(this.getComponent(this.etu.size()).getBackground()==Color.GREEN){
            int i=0;
            for(Etudiant e:this.etu){
                this.getComponent(i).setBackground(this.getBackground());
                if(this.liste.contains(e))
                    this.liste.remove(e);
                i++;
            }
            this.getComponent(this.etu.size()).setBackground(this.getBackground());
        }else{
            int i=0;
            for(Etudiant e:this.etu){
                this.getComponent(i).setBackground(Color.GREEN);
                this.liste.add(e);
                i++;
            }
            this.getComponent(this.etu.size()).setBackground(Color.GREEN);
        }
        this.repaint();
    }
}
