package main;
import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;

import java.util.List;
import java.util.ArrayList;

public class GestionEtudiantsIhm extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	FormulaireEtudiant panneauFormulaire;
	PanneauListeEtudiants panneauListeEtudiants;
	JButton boutonEditer;
	JButton boutonModifier;
	JButton boutonAjouter;
	JButton boutonSupprimer;

	public GestionEtudiantsIhm(List<Etudiant> etudiants) {
		super("Gestion des étudiants");
		
		setLayout(new BorderLayout());
		
		//Menu
				JMenuBar jmb = new JMenuBar();
				JMenu mFichier = new JMenu("Fichier");
				JMenu mInfo = new JMenu("A propos");
				
				JMenuItem mSauver = new JMenuItem ("Sauvegarder");
				JMenuItem mOuvrir = new JMenuItem ("Ouvrir");
				JMenuItem mQuitter = new JMenuItem ("Quitter");
				JMenuItem mAPropos = new JMenuItem("A propos");
				
				//Listeners
				mEtListener mel = new mEtListener();
				
				add(jmb,BorderLayout.NORTH);
				jmb.add(mFichier);
				jmb.add(mInfo);
				mFichier.add(mSauver);
				mSauver.addActionListener(mel);
				mFichier.add(mOuvrir);
				mOuvrir.addActionListener(mel);
				mFichier.addSeparator();
				mFichier.add(mQuitter);
				mQuitter.addActionListener(mel);
				mInfo.add(mAPropos);
				mAPropos.addActionListener(mel);
				
		
		

		// panneau contenant la liste des etudiants Ã  l'Ouest
		panneauListeEtudiants = new PanneauListeEtudiants(etudiants);
		add(panneauListeEtudiants, BorderLayout.WEST);

		// panneau contenant le formulaire de saisie d'un etudiant
		panneauFormulaire = new FormulaireEtudiant();
		add(panneauFormulaire, BorderLayout.EAST);

		// panneau des boutons d'action au centre
		JPanel panneauBoutons;
		
		//panneau à bouton
		panneauBoutons = new JPanel();
		panneauBoutons.setLayout(new GridLayout(0,1));
		boutonEditer = new JButton("Editer =>");
		boutonModifier = new JButton("<= Modifier");
		boutonAjouter = new JButton("<= Ajouter");
		boutonSupprimer = new JButton("X Supprimer X");
		panneauBoutons.add(boutonEditer);
		panneauBoutons.add(boutonModifier);
		panneauBoutons.add(boutonAjouter);
		panneauBoutons.add(boutonSupprimer);
		
		//panneauCentral.add(panneauBoutons, BorderLayout.CENTER);
		add(panneauBoutons, BorderLayout.CENTER);

		// Gestion des evenements
		boutonAjouter.addActionListener(new EcouteurBoutonAjouter(this));
		boutonModifier.addActionListener(new EcouteurBoutonModifier(this));
		boutonEditer.addActionListener(new EcouteurBoutonEditer(this));
		boutonSupprimer.addActionListener(new EcouteurBoutonSupprimer(this));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Assemblage et affichage
		pack();
		setVisible(true);
	}

	/**
	 * ajoute l'Ã©tudiant saisi dans le formulaire dans la liste des Ã©tudiants
	 */ 
	public void ajouterEtudiant() {
		// TODO : rÃ©cupÃ©rer les valeurs dans le formulaire
		// et ajouter le nouvel Ã©tudiant corrrespondant
		System.out.println("TODO AJOUTER");
		System.out.println(panneauFormulaire.getNom() + " "
			+ panneauFormulaire.getPrenom() + " "
			+ panneauFormulaire.getAge() + " "
			+ panneauFormulaire.getSpecialite() + " "
			+ panneauFormulaire.getMoyenne());
		// Correction :
		panneauListeEtudiants.ajouterEtudiant(panneauFormulaire.getEtudiant());
	}

	/**
 	 * place l'Ã©tudiant sÃ©lectionnÃ© dans la liste dans le
 	 * formulaire de saisie
 	 */ 
	public void editerEtudiant() {
		// TODO : rÃ©cupÃ©rer l'Ã©tudiant selectionnÃ© dans la liste
		// et le charger dans le formulaire
		System.out.println("TODO EDITER");
		// Correction :
		Etudiant etudiantAEditer = panneauListeEtudiants.getSelectedEtudiant();
		if (etudiantAEditer != null) {
			System.out.println(etudiantAEditer);
			panneauFormulaire.initChampsFormulaire(etudiantAEditer);
		}
	}

	/**
 	 * remplace les donnÃ©es de l'Ã©tudiant sÃ©lectionnÃ© dans la liste
 	 * par les infos contenues dans le formulaire
 	 */ 
	public void modifierEtudiant() {
		// TODO : rÃ©cupÃ©rer les valeurs dans le formulaire
		// et modifier l'Ã©tudiant sÃ©lÃ©ctionnÃ© dans la liste
		System.out.println("TODO MODIFIER");
		System.out.println(panneauFormulaire.getEtudiant());
		// Correction :
		panneauListeEtudiants.modifierEtudiant(panneauFormulaire.getEtudiant());
	}

	/**
     * supprimer l'Ã©tudiant selectionnÃ© de la liste d'Ã©tudiants
     */ 
	public void supprimerEtudiant() {
		// TODO : rÃ©cupÃ©rer les valeurs dans le formulaire
		// et modifier l'Ã©tudiant sÃ©lÃ©ctionnÃ© dans la liste
		System.out.println("TODO SUPPRIMER");
		// Correction :
		panneauListeEtudiants.supprimerEtudiantSelectionne();
	}


	/**
 	 * application principale : lance l'IHM initialisÃ©e avec
 	 * une liste de quelques Ã©tudiants
 	 */ 
	public static void main(String[] args) {
		List<Etudiant> etudiants;
		GestionEtudiantsIhm ihm;
		etudiants = new ArrayList<Etudiant>();
		etudiants.add(new Etudiant("Eme", "Maud", 21, Specialite.Informatique, 12.0));
		etudiants.add(new Etudiant("Dupont", "Henri", 22, Specialite.Mathematique, 8.0));
		etudiants.add(new Etudiant("Durand", "Paul", 21, Specialite.Informatique, 16.0));
		ihm = new GestionEtudiantsIhm(etudiants);
	}
}


// Ecouteurs mettant en relation les boutons d'action de l'IHM avec ses mÃ©thodes
// de modification de la liste d'Ã©tudiants

class EcouteurBoutonModifier implements ActionListener {
	private GestionEtudiantsIhm ihm;

	public EcouteurBoutonModifier(GestionEtudiantsIhm _ihm) {
		ihm = _ihm;
	}

	public void actionPerformed(ActionEvent e) {
		ihm.modifierEtudiant();
	}
}

class EcouteurBoutonEditer implements ActionListener {
	private GestionEtudiantsIhm ihm;

	public EcouteurBoutonEditer(GestionEtudiantsIhm _ihm) {
		ihm = _ihm;
	}

	public void actionPerformed(ActionEvent e) {
		ihm.editerEtudiant();
	}
}

class EcouteurBoutonSupprimer implements ActionListener {
	private GestionEtudiantsIhm ihm;

	public EcouteurBoutonSupprimer(GestionEtudiantsIhm _ihm) {
		ihm = _ihm;
	}

	public void actionPerformed(ActionEvent e) {
		ihm.supprimerEtudiant();
	}
}

/******/
class EcouteurBoutonAjouter implements ActionListener {
	private GestionEtudiantsIhm ihm;

	public EcouteurBoutonAjouter(GestionEtudiantsIhm _ihm) {
		ihm = _ihm;
	}

	public void actionPerformed(ActionEvent e) {
		ihm.ajouterEtudiant();
	}
}
