package fr.iutfbleau.papillon;

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

/**
 * La classe <code>FenetreRappel</code> représente la fenêtre d’affichage
 * détaillée d’un rappel dans l’application <b>Papillon</b>.
 * <p>
 * Elle affiche les informations complètes du rappel sélectionné
 * (titre, contenu, thème, et priorité) et permet à l’utilisateur
 * de le modifier ou de fermer la fenêtre.
 * </p>
 *
 * @version 1.0
 * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
 */
public class FenetreRappel extends JFrame implements ActionListener{

     /** Bouton permettant de fermer la fenêtre. */
    private final JButton btnFermer = new JButton("Fermer");

    /** Bouton permettant d’ouvrir la fenêtre de modification du rappel. */
    private final JButton btnModifier = new JButton("Modifier");

    /** Référence vers la fenêtre principale de l’application. */
    private final Main main;

    /** Référence vers le rappel à afficher. */
    private Rappel rappel;

    /**
     * Constructeur de la fenêtre d’affichage d’un rappel.
     *
     * @param r le rappel à afficher
     * @param main la fenêtre principale
     */
    public FenetreRappel(Rappel r, Main main) {
        super("Rappel : " + r.getTitre());
        ImageIcon logo = new ImageIcon("logo.png");
        setIconImage(logo.getImage());

        this.main = main;
        this.rappel = r;

        setSize(350, 250);
        setLocationRelativeTo(null);
        setResizable(false);
        setAlwaysOnTop(true);
        setLocation(main.getLocation());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel(new GridBagLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));

        JLabel titre = new JLabel("<html><h2>" + r.getTitre() + "</h2></html>");
        JTextArea contenu = new JTextArea(r.getContenu());
        contenu.setLineWrap(true);
        contenu.setWrapStyleWord(true);
        contenu.setEditable(false);

        JLabel infos = new JLabel("<html><i>Thème : " + r.getTheme() + " <br>Rang : " + r.getRang() + "</i></html>");

        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(4, 4, 4, 4);
        c.fill = GridBagConstraints.HORIZONTAL;

        panel.add(titre, c);
        c.gridy = 1; 
        c.weightx = 1.0; 
        c.weighty = 1.0; 
        c.gridwidth = 2;
        c.fill = GridBagConstraints.BOTH;
        panel.add(new JScrollPane(contenu), c);
        c.gridx = 0; 
        c.gridy = 2; 
        c.weightx = 0; 
        c.weighty = 0;
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.WEST;
        panel.add(infos, c);
        btnModifier.addActionListener(this);
        btnFermer.addActionListener(this);
        JPanel btnPanel = new JPanel();

        c.gridx = 1; 
        c.gridy = 2; 
        c.weightx = 0; 
        c.weighty = 0;
        c.anchor = GridBagConstraints.EAST;

        
        btnPanel.add(btnModifier);
        btnPanel.add(btnFermer);
        panel.add(btnPanel, c);

        setContentPane(panel);
        setVisible(true);
        main.dispose();
    }

    /**
     * Gère les actions effectuées sur les boutons de la fenêtre.
     * <ul>
     *     <li><b>Fermer</b> : ferme la fenêtre actuelle.</li>
     *     <li><b>Modifier</b> : ouvre la fenêtre de modification du rappel.</li>
     * </ul>
     *
     * @param e l’événement d’action déclenché
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnFermer) {
            Main reParent = new Main();
            reParent.setLocation(this.getLocation());
            reParent.setVisible(true);
            this.dispose();
        }
        else if (e.getSource() == btnModifier) {
            FenetreModif f = new FenetreModif(main,rappel);
                f.setVisible(true);
                this.dispose();
        }
    }
}
