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

public class PanelRappel extends JPanel implements ActionListener, MouseListener {
    private boolean estSelectionne = false;

    private  JLabel lbtitre;
    private  JLabel lbcontenu;
    private  Rappel r;

    private  JPopupMenu menu;
    private  JMenuItem itemOuvrir;
    private Main main;

    private static CouleurList couleur = new CouleurList();

    public PanelRappel(Rappel r, Main main) {
        super(new BorderLayout(2, 0));
        this.main = main;
        createPanel(r);
    }

    public PanelRappel(Rappel r) {
        super(new BorderLayout(2, 0));
        createPanel(r);
    }

    public void createPanel(Rappel r){
        this.r = r;

        // --- Titre et contenu raccourci ---
        lbtitre = new JLabel("[" + r.getRang() + "] " + r.getTitre());
        lbcontenu = new JLabel(
            "<html>" + (r.getContenu().length() > 40 ? r.getContenu().substring(0, 40) + "..." : r.getContenu()) + "</html>"
        );

        // --- Apparence de base ---
        this.setPreferredSize(new Dimension(70, 50));
        this.setBackground(couleur.couleurDe(r.getTheme()));
        this.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 2));

        setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.anchor = GridBagConstraints.NORTHWEST;

        // --- Position du titre ---
        c.gridx = 0; 
        c.gridy = 0; 
        c.weightx = 1;
        c.fill = GridBagConstraints.NONE;
        add(lbtitre, c);

        // --- Position du contenu ---
        c.gridx = 0; 
        c.gridy = 1; 
        c.weightx = 1;
        c.fill = GridBagConstraints.NONE;
        add(lbcontenu, c);

        // --- Menu contextuel (clic droit) ---
        menu = new JPopupMenu();
        itemOuvrir = new JMenuItem("Ouvrir");
        itemOuvrir.addActionListener(this);
        menu.add(itemOuvrir);

        // --- Activation des clics ---
        addMouseListener(this);
    }

    // === GETTERS ===
    public boolean getSelection() {
        return estSelectionne;
    }

    public int getId() {
        return r.getId();
    }

    public Rappel getRappel() {
        return r;
    }

    // === ACTIONS ===
    @Override
    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();

        if (src == itemOuvrir) {
            // ouverture complète depuis le menu clic droit
            new FenetreRappel(r, main);
        }
    }

    // === GESTION DES CLICS SOURIS ===
    @Override
    public void mousePressed(MouseEvent e) {
        if (e.isPopupTrigger()) {
            menu.show(e.getComponent(), e.getX(), e.getY());
        } else {
            // clic gauche = sélection / désélection
            estSelectionne = !estSelectionne;
            majApparence();
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        if (e.isPopupTrigger()) {
            menu.show(e.getComponent(), e.getX(), e.getY());
        }
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // === Double clic pour ouvrir la vue complète ===
        if (e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton(e)) {
            new FenetreRappel(r, main);

        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
    }

    @Override
    public void mouseExited(MouseEvent e) {
        setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1));
        
    }

    private void majApparence() {
        if (estSelectionne) {
            setBackground(Color.LIGHT_GRAY);
            setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
        } else {
            setBackground(couleur.couleurDe(r.getTheme()));
        }
        
    }
}
