package fr.iutfbleau.papillon;
import java.util.ArrayList;
import javax.swing.*;
import java.awt.event.*;
/**
 * La classe GestionModif gère les boutons de la fenêtre
 * de modification d’un rappel dans l’application Papillon.
 * 
 * Elle permet à l’utilisateur de valider ou d’annuler les changements
 * effectués sur un rappel existant.
 * 
 *
 * @version 1.0
 * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
 */
public class GestionModif extends ArrayList 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 rang;
    /** Sélecteur du thème du rappel. */
    private final JComboBox 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 rang, JComboBox 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.
     * 
     * Si l’utilisateur clique sur Annuler, la fenêtre principale est réaffichée.  
     * Si l’utilisateur clique sur Valider, les changements sont enregistrés.
     * 
     *
     * @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();
        }
    }
}