package IG;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


/**
 * Classe pour une zone carrée pouvant recevoir des clics de souris.
 */
public abstract class ZoneCliquable extends JPanel implements MouseListener {

    private Texte texte;

    /**
     * Deux constructeurs, incluant ou non la création d'une zone de texte.
     *
     * @param texte Texte à afficher
     * @param x Première dimension de la case
     * @param y Deuxième dimention de la case
     */
    public ZoneCliquable(String texte, int x, int y) {
	this(x, y);
	this.texte = new Texte(texte);
	this.add(this.texte);
    }

    public ZoneCliquable(int x, int y) {
	setPreferredSize(new Dimension(x, y));
	addMouseListener(this);
	setBackground(Color.WHITE);
    }
    
    /**
     * Change le texte affiché dans la zone. 
     *
     * @param texte Nouveau texte à afficher.
     */
    public void changeTexte(String texte) {
    	this.texte.changeTexte(texte);
    }
    
    /**
     * Méthodes abstraites à définir pour indiquer les actions à effectuer
     * lors d'un clic gauche ou droit.
     */
    public abstract void clicGauche();
    public abstract void clicDroit();
    
    /**
     * Interfaçage entre la bibliothèque standard et les méthodes [clicGauche]
     * et [clicDroit].
     */
    public void mouseClicked(MouseEvent e) {
	if (SwingUtilities.isRightMouseButton(e)) {
	    this.clicDroit();
	} else {
	    this.clicGauche();
	}
    }

    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
}