/* Klasse om kaarten en routes te visualiseren */

import javax.swing.*;
import java.awt.*;

public class Map extends JFrame{

    private Kaart huidigeKaart;
    private Tour  huidigeTour;
    Image offscreenImage;
    Graphics offscreenGraphics;	
	
	public Map(Kaart k){
	   huidigeKaart = k; 
	   init();
	   	  
	} 

    public void init()
	{   
	   //MSWindows Look and Feel 
	    try {
	      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
	    } catch (Exception E) { };
	    Container cp = getContentPane();
        cp.setLayout(null);
		setSize(610,610);
		setVisible(true);
		offscreenImage = createImage(600, 600);
	    offscreenGraphics = offscreenImage.getGraphics(); 
		teken();
	}	

    //override paint
    public void paint(Graphics g){
        g.drawImage(offscreenImage,0,0,this.getWidth(),this.getHeight(),this);	
    	
    }	


    public void setKaart(Kaart k){
       huidigeKaart = k;
       teken();
     
    }

    public void setRoute(Tour t){
      huidigeTour = t;
      teken();
    }
    
    
    //tekent 
    private void teken(){
    	//new image
    	offscreenImage = createImage(600, 600);
    	offscreenGraphics = offscreenImage.getGraphics();
        
        //cities blue
        offscreenGraphics.setColor(Color.blue);
        for (int i=1; i <= huidigeKaart.grootte(); i++){
           Stad s = huidigeKaart.get(i);	
           offscreenGraphics.fillOval(6*s.getX()-3,6*s.getY()-3,6,6);	
           offscreenGraphics.drawString(String.valueOf(i), 6*s.getX()+4,6*s.getY()+4);	
        }	
        offscreenGraphics.setColor(Color.red);
        try {
           int [] route = huidigeTour.route();
           for (int i=1; i < huidigeKaart.grootte(); i++){
              Stad s1 = huidigeKaart.get(route[i]);
              Stad s2 = huidigeKaart.get(route[i+1]);	
              offscreenGraphics.drawLine(6*s1.getX() , 6*s1.getY(), 6*s2.getX() , 6*s2.getY());
           }	
        } catch (Exception e) {
          //System.out.println("Warning: Attempting to draw route without tour");	
        }	 
	    //offscreenGraphics.drawImage(offscreenImage,0,0,this);
    	repaint();
    }	


}