/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ambienteGrafico.ferramentas;

import ambienteGrafico.componentes.Canvas;
import ambienteGrafico.componentes.PainelFerramentaAgentes;
import ambienteGrafico.componentes.PainelFerramentaAmbiente;
import auxiliar.Conversor;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

/**
 *
 * @author Marília
 */
public class FerramentaDesenharLinha extends Ferramenta {


	private BufferedImage imagemPrincipal;
    private BufferedImage imagemAmbiente;//Imagem sem agentes

	private Graphics2D g2DPrincipal;
    private Graphics2D g2DAmbiente;
    private Canvas painelCanvas;

    private Cursor cursor;
    private PainelFerramentaAmbiente painelFerramenta;

    public boolean dragged = false;
    public int pontoInicialX = 0;
    public int pontoInicialY = 0;
    public int pontoAnteriorX = 0;
    public int pontoAnteriorY = 0;

    private Stroke strokeLinha;//Largura da linha


    public FerramentaDesenharLinha(PainelFerramentaAmbiente painel) {
        super();
        this.cursor = new Cursor(Cursor.CROSSHAIR_CURSOR);
        this.painelFerramenta = painel;
    }

    public PainelFerramentaAmbiente getPainel() {
        return painelFerramenta;
    }

    public void setPainel(PainelFerramentaAmbiente painel) {
        this.painelFerramenta = painel;
    }

    @Override
    public Cursor getCursor() {
        return cursor;
    }

    @Override
    public void mousePressed(MouseEvent e) {
        
        dragged = false;
        painelCanvas = (Canvas) e.getSource();

        imagemPrincipal = painelCanvas.getImagemPrincipal();
        imagemAmbiente = painelCanvas.getImagemAmbiente();
        g2DPrincipal = imagemPrincipal.createGraphics();
        g2DAmbiente = imagemAmbiente.createGraphics();

        painelCanvas.setImagemPrincipal(imagemPrincipal);
        painelCanvas.setImagemAmbiente(imagemAmbiente);

        pontoInicialX = e.getX();//Na escala do canvas e não da imagem
        pontoInicialY = e.getY();//Na escala do canvas e não da imagem

        g2DPrincipal.setPaint(Color.BLUE);
		g2DAmbiente.setPaint(Color.BLUE);

		//startX = theCanvas.canvasScale(mevt.getX());
		//startY = theCanvas.canvasScale(mevt.getY());
		//////////////////////////////////////////////////System.out.println("Line");
		//////////////////////////////////////////////////backupImage = theCanvas.getBufferedImage();
		//////////////////////////////////////////////////System.out.println("Linea");
		//////////////////////////////////////////////////curImage = theCanvas.getBufferedImage();
		//////////////////////////////////////////////////System.out.println("Lineb");
		//////////////////////////////////////////////////theCanvas.setBufferedImage(curImage);
		//////////////////////////////////////////////////System.out.println("Linec");

		//imagemSemAgentes = theCanvas.getImagemSemAgentes();

		//if(imagemSemAgentes == null)// Se nenhum agente foi instanciado
			//imagemSemAgentes = curImage;

		//theCanvas.setImageSemAgentes(imagemSemAgentes);

		//////////////////////////////////////////////////mapeamento(startX, startY, dragged, theCanvas);
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        dragged = true;//Indica que o mouse foi pressionado e movimentado

		//////////////////////////////////////////////////curImage.createGraphics().drawImage(backupImage, null, 0, 0);
		//////////////////////////////////////////////////drawLine(mevt, curImage.createGraphics(), theCanvas);
		//////////////////////////////////////////////////int zoom = (int) theCanvas.getZoom();

		//////////////////////////////////////////////////int viewX = (int) theCanvas.pictureScrollPane.getViewport()
		//////////////////////////////////////////////////		.getViewPosition().getX();
		//////////////////////////////////////////////////int viewY = (int) theCanvas.pictureScrollPane.getViewport()
		//////////////////////////////////////////////////		.getViewPosition().getY();

		//////////////////////////////////////////////////if (zoom == 0)
		//////////////////////////////////////////////////	zoom = 1;


		//////////////////////////////////////////////////int newx = ((startX - viewX / zoom) * zoom);
		//////////////////////////////////////////////////int newy = ((startY - viewY / zoom) * zoom);
		//////////////////////////////////////////////////int newendX = ((mevt.getX() - viewX / zoom) * zoom);
		//////////////////////////////////////////////////int newendY = ((mevt.getY() - viewY / zoom) * zoom);
		//////////////////////////////////////////////////int width = Math.abs(newx - newendX);
		//////////////////////////////////////////////////int height = Math.abs(newy - newendY);
		//////////////////////////////////////////////////prevX = ((prevX - viewX / zoom) * zoom);
		//////////////////////////////////////////////////prevY = ((prevY - viewY / zoom) * zoom);
		//////////////////////////////////////////////////int prevWidth = Math.abs(newx - prevX);
		//////////////////////////////////////////////////int prevHeight = Math.abs(newy - prevY);
		//////////////////////////////////////////////////if (prevX != -1) {
			//System.out.println(newx+" "+newy);
		//////////////////////////////////////////////////	if (newx < prevX) {
		//////////////////////////////////////////////////		prevX = newx;
		//////////////////////////////////////////////////	}
		//////////////////////////////////////////////////	if (newy < prevY) {
		//////////////////////////////////////////////////		prevY = newy;
		//////////////////////////////////////////////////	}
		//////////////////////////////////////////////////	theCanvas.repaint(prevX - 3 * zoom, prevY - 3 * zoom, prevWidth + 8
		//////////////////////////////////////////////////			* zoom, prevHeight + 8 * zoom);
		//////////////////////////////////////////////////}
		//////////////////////////////////////////////////if (newx > newendX) {
		//////////////////////////////////////////////////	newx = newendX;
		//////////////////////////////////////////////////}
		//////////////////////////////////////////////////if (newy > newendY) {
		//////////////////////////////////////////////////	newy = newendY;
		//////////////////////////////////////////////////}
		//////////////////////////////////////////////////prevX = mevt.getX();
		//////////////////////////////////////////////////prevY = mevt.getY();
		//////////////////////////////////////////////////theCanvas.repaint(newx - 3 * zoom, newy - 3 * zoom, width + 8 * zoom,
		//////////////////////////////////////////////////		height + 8 * zoom);

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        //Se soltar o mouse sem tê-lo movimentado, nada será desenhado
        if (dragged) {

			//////////////////////////////////////////////////g2DPrincipal.drawImage(backupImage, null, 0, 0);
			//////////////////////////////////////////////////drawLine(mevt, curImage.createGraphics(), theCanvas);

			//////////////////////////////////////////////////imagemSemAgentes.createGraphics().drawImage(backupImage, null, 0, 0);
			//////////////////////////////////////////////////drawLine(mevt, imagemSemAgentes.createGraphics(), theCanvas);

            int[] ultimaPosicao = Conversor.converterEscalaCanvasParaEscalaImagem(e.getX(),e.getX(),
                                                                          painelCanvas.getWidth(),painelCanvas.getHeight(),
                                                                          imagemPrincipal.getWidth(), imagemPrincipal.getHeight());
			
            painelCanvas.repaint();
			dragged = false;
		}
    }


}
