package fr.iutfbleau.papillon;

import java.util.ArrayList;
import javax.swing.*;
import java.awt.event.*;


/**
 * La classe <code>GestionModif</code> gère les boutons de la fenêtre
 * de modification d’un rappel dans l’application <b>Papillon</b>.
 * <p>
 * Elle permet à l’utilisateur de valider ou d’annuler les changements
 * effectués sur un rappel existant.
 * </p>
 *
 * @version 1.0
 * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
 */
public class GestionModif extends ArrayList<JButton> implements ActionListener{


    /** Bouton de validation. */
    private final JButton boutonValider;

    /** Bouton d'annulation. */
    private final JButton boutonAnnuler;

    /** Champ de saisie pour le titre du rappel. */
    private final JTextField champTitre;

    /** Champ de saisie pour le contenu du rappel. */
    private final JTextArea champContenu;

    /** Sélecteur du niveau de priorité. */
    private JComboBox<Integer> rang;

    /** Sélecteur du thème du rappel. */
    private final JComboBox<String> comboTheme;

    /** Référence au rappel à modifier. */
    private Rappel rappel;

    /** Gestionnaire des commandes agissant sur les rappels. */
    private final GestionRappel ges = new GestionRappel();

    /** Référence à la fenêtre principale. */
    private final Main parent;

    /** Référence à la fenêtre de modification. */
    private final JFrame f;    

    /**
     * Constructeur du gestionnaire de boutons pour la fenêtre de modification.
     *
     * @param f la fenêtre de modification
     * @param parent la fenêtre principale
     * @param champTitre le champ de texte pour le titre
     * @param champContenu la zone de texte pour le contenu
     * @param rang la liste déroulante de priorité
     * @param comboTheme la liste déroulante du thème
     * @param r le rappel à modifier
     */
    public GestionModif(JFrame f, Main parent, JTextField champTitre, JTextArea champContenu, JComboBox<Integer> rang, JComboBox<String> comboTheme, Rappel r){

        this.f = f;
        this.parent = parent;
        this.champTitre = champTitre;
        this.champContenu = champContenu;
        this.rang = rang;
        this.comboTheme = comboTheme;
        this.rappel = r;

        boutonValider = new JButton("Valider");
        boutonAnnuler = new JButton("Annuler");
        this.add(boutonValider);
        this.add(boutonAnnuler);
        boutonValider.addActionListener(this);
        boutonAnnuler.addActionListener(this);

    }

    /**
     * Gère les actions effectuées sur les boutons de la fenêtre.
     * <p>
     * Si l’utilisateur clique sur <b>Annuler</b>, la fenêtre principale est réaffichée.  
     * Si l’utilisateur clique sur <b>Valider</b>, les changements sont enregistrés.
     * </p>
     *
     * @param e l’événement d’action déclenché par un bouton
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();

        if (src == boutonAnnuler) {

            parent.setLocation(f.getLocation());
            parent.setVisible(true);
            f.dispose();
            return;
        }

        if (src == boutonValider) {
            String t = champTitre.getText().trim();
            String c = champContenu.getText().trim();
            int r = (Integer) rang.getSelectedItem();
            String th = (String) comboTheme.getSelectedItem();

            if (t.isEmpty()) {
                JOptionPane.showMessageDialog(f, "Veuillez remplir le titre.", "Champs manquants", JOptionPane.WARNING_MESSAGE);
                return;
            }

            //  MAJ directe du rappel
            
                rappel.setTitre(t);     
                rappel.setContenu(c); 
                rappel.setRang(r);
                rappel.setTheme(th);   
                try{
                ges.modifierParId(rappel.getId(), rappel);
                } catch (Exception ex) {
            ex.printStackTrace();
                }
            

            Main reParent = new Main();
            reParent.setLocation(f.getLocation());
            reParent.setVisible(true);
            f.dispose();
        }
    }
}