package source;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
 *
 * @author Radoslaf
 */
public class Navigation extends Canvas implements Runnable {

    //Instance potrebnych trid
    Calculation calc = new Calculation(this);
    ImageArrowProccesing A = new ImageArrowProccesing(this, calc);

    // Variables
    public Navigator navi = null;
    private Image arrow = null;
    public short direction = 0;
    boolean brun = true;

    // Konstruktor, start vlakna
    public Navigation(Navigator navi) {
        this.navi = navi;
        Thread th = new Thread(this);
        th.start();
    }

    protected synchronized void paint(Graphics g) {
        // V kazdem kroku je inicializována instance výpočtu
        
        // Vykresleni obrazovky
        this.setFullScreenMode(true);
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        this.arrow = A.retrieveImage();
        g.drawImage(this.arrow, 0, 0, 0);
        g.setColor(0, 0, 0);
        g.drawString("Směr cesty je " + A.aktangle + "\u00B0", 5, this.getWidth() + 5, Graphics.TOP | Graphics.LEFT);
        // Pokud zbyde místo vykresli se další udaje
        int toEnd = this.getHeight() - this.getWidth() + 22;
        // Výpočet vzdálenosti
        double distance = calc.distance();
        String vzd = null;
        if (distance < 1000) {
            distance = (int) distance;
            vzd = new String("" + distance + " m");
        } else {
            distance = (int) (distance / 1000);
            vzd = new String("" + distance + " km");
        }
        if (toEnd > 64) {
            g.drawString("Vzdálenost " + vzd, 5, this.getWidth() + 28, Graphics.TOP | Graphics.LEFT);
        }
    }

    //Zmáčknutí klávesy
    protected void keyPressed(int keyCode) {

        // Ukončení zobrazování Kompasu
        if (keyCode == KEY_NUM5) {
            brun = false;
            navi.switchDisplayable(null, navi.getNavi());
            navi.navigation = null;
        }

        // Vyvolání formuláře uložení
        if (keyCode == KEY_NUM2) {
            brun = false;
            navi.switchDisplayable(null, navi.getSaveForm());
            navi.navigation = null;
        }

        // Vyvolání formuláře pro waypoint
        if (keyCode == KEY_NUM8) {
            brun = false;
            navi.switchDisplayable(null, navi.getLoadForm());
            navi.navigation = null;
        }
    }

    public void run() {
        while (brun != false) {

            // Pemaluje displej
            repaint();

            try {
                // Uspí vlákno na 250ms
                Thread.sleep(250);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }
}
