import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 * Projet:PaintRevolution
 * <p>Title: FabricantFigures.java</p>
 * <p>Description: Classe qui représente un outil permettant de fabriquer des figures grace à la souris</p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author VIGNERON GEOFFROY && GANGANELLI DORIAN
 * @version 3.0
 */

public class FabricantFigures implements MouseListener {
    
    /**
     * Attribut qui représente la figure à construire
     */
    private FigureColoree fc;
    
    /**
     * Attribut qui mémorise le nombre de points de click de souris pendant la
     * fabrication de la figure
     */
    private int nbPointsClick;
    
    /**
     * Tableau qui contient les points enregistrés pour la construction
     */
    private UnPoint[] pointSaisis;
    
    /**
     * Permet de savoir si un point d'une 
     * figure a été défini
     */
    private boolean sourisPressed;
    
    /**
     * Constructeur de la classe qui initialise les attributs d'instance.
     * @param f figure à construire
     */
    public FabricantFigures(FigureColoree f){
        if(f != null){
            this.fc = f;
            this.nbPointsClick=0;
            this.pointSaisis = new UnPoint[f.nbPoints()];
            sourisPressed=false;
        }
    }
    
    
    public void mouseReleased (MouseEvent e) {}
    public void mouseClicked  (MouseEvent e) {}
    
    /**
     * Méthode qui traduit l'action de la souris en entrant 
     * sur le panel en indiqunat un message
     * @param e Evenement généré par la souris
     */
    public void mouseEntered  (MouseEvent e) { 
        if (!sourisPressed){
            Graphics g = ((JPanel)e.getSource()).getGraphics();
            int x=(((JPanel)(e.getSource())).getSize().width)/2-60;
            g.setColor(Color.red);
            g.drawString("Définissez "+fc.nbPoints()+" points de saisis",x,12);
        }
    }
    
    /**
     * Méthode qui traduit l'action de la souris sortant du JPanel
     * en supprimant le message.
     * @param e Evenement généré par la souris
     */
    public void mouseExited (MouseEvent e) { 
        if (!sourisPressed){
            ((DessinFigures)(e.getSource())).repaint();
        }
    }
    
    
    /**
     * Méthode qui traduit l'action de la souris durant la construction de la figure
     * en mémorisant les points cliqués sous certaines conditions.
     * @param e Evenement généré par la souris
     */
    public void mousePressed(MouseEvent e) {
        int x=(((DessinFigures)(e.getSource())).getSize().width)/2-60;
        if (SwingUtilities.isLeftMouseButton(e)){
            if (this.fc != null){
                Graphics g = ((JPanel)e.getSource()).getGraphics();
                
                if(nbPointsClick < this.pointSaisis.length ) {
                    
                    this.pointSaisis[this.nbPointsClick] = new UnPoint( e.getX() , e.getY() );
                    this.nbPointsClick++;
                    ((JPanel)e.getSource()).paint(g);
                    g.setColor(Color.red);
                    g.drawString("Reste "+(this.pointSaisis.length-nbPointsClick)+ " point(s) à définir" ,x,12);
                    
                    if (nbPointsClick == this.pointSaisis.length){
                        ((JPanel)e.getSource()).paint(g);
                        g.setColor(Color.red);
                        g.drawString("Recliquez pour valider votre figure",x,12);
                    }
                
                }else{
                    fc.modifierPoints( this.pointSaisis );
                    ((DessinFigures)e.getSource()).ajoute(fc);
                    ((DessinFigures)(e.getSource())).repaint();
                    ((JComponent)e.getSource()).removeMouseListener(this);
                }
            }
            sourisPressed=true;
        }
    }
}