import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

/**
 *
 * @author Jiri Stepanovsky
 */
public class CanvasPanel extends Canvas implements MouseListener, MouseMotionListener{
        private Main main;
        boolean dragged = false;
        boolean whitelady = true;
        int x2 = 0, y2 = 0 , b =0 ;
    
    public CanvasPanel(Main main){
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
        this.main = main;
    }
    
    @Override
    public Dimension getPreferredSize(){
        return new Dimension(400,400);
    }
    
    @Override
    public void paint(Graphics g){
        int z; // delka hrany jednoho pole
        if(main.map != null){
        if(main.heigth > main.width){
            z = 400 / main.heigth;
        }else{
            z = 400 / main.width;
        }
        int x1 = 0, y1 = 0;
        while(y1 < main.heigth){
                if(main.map[x1][y1] == 2){
                    g.setColor(Color.white);
                }else if(main.map[x1][y1] == 3){
                    g.setColor(Color.green);
                }else if(main.map[x1][y1] == 0){
                    g.setColor(Color.gray);
                }else if(main.map[x1][y1] == 1){
                    g.setColor(Color.black);
                }else if(main.map[x1][y1] == 4){
                    g.setColor(Color.yellow);
                }
                g.fillRect(z*x1,z*y1,z,z);
                x1++;
                if(x1 >= main.width){
                    x1 = 0;
                    y1++;
                }
            }
        }
    }
    

    @Override
    public void mouseClicked(MouseEvent e) {
        //kliknutim zmeni pole
        int z; // delka hrany jednoho pole
        if(main.map != null && main.editb){
        if(main.heigth > main.width){
            z = 400 / main.heigth;
        }else{
            z = 400 / main.width;
        }
        int x = e.getX()/z;
        int y = e.getY()/z;
        if(main.map[x][y] == 0){
        main.map[x][y] = 1;
        }else if(main.map[x][y] == 1){
        main.map[x][y] = 4;
        }else if(main.map[x][y] == 4){
        main.map[x][y] = 0;
        }
        repaint();
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
        
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        dragged = false;
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        
    }

    @Override
    public void mouseExited(MouseEvent e) {
        dragged = false;
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //tahnutim posune bilou pani nebo televizi
        int z; // delka hrany jednoho pole
        if(main.map != null && main.editb){
        if(main.heigth > main.width){
            z = 400 / main.heigth;
        }else{
            z = 400 / main.width;
        }
        if(dragged){
            int x = e.getX()/z;
            int y = e.getY()/z;
            if((x != x2 || y != y2)&& (main.map[x][y]!=2&&main.map[x][y]!=3 )){
                main.map[x2][y2] = (byte)b;
                b = main.map[x][y];
                x2 = x;
                y2 = y;
                if(whitelady){
                    main.map[x][y]= 2;
                }else{
                    main.map[x][y]= 3;
                }
            }
        }else{
        int x = e.getX()/z;
        int y = e.getY()/z;
        if(main.map[x][y] == 2 || main.map[x][y] == 3){
            x2 = x;
            y2 = y;
            b = 0;
            dragged = true;
            if(main.map[x][y] == 2){
                whitelady = true;
            }else{
                whitelady = false;
            }
        }
        }
        repaint();
        }
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        
    }
    
}
