/*
 * Created on 14.09.2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package gui;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

import controller.SqlCommunicator;

import java.util.HashMap;

/**
 * @author user
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class CurrentSensorPanel extends JPanel {
    public final static int EMPTY_FLOOR = 0;
    public final static int FLOOR_0 = 1;
    public final static int FLOOR_1 = 2;
    public final static int FLOOR_2 = 3;
    public final static int FLOOR_3 = 4;
	public final static int FLOOR_4 = 5;
    public final static int STATE_COUNT = 5;
    private HashMap brick_images_;
    private int internal_state_;
    private int parent_rule_;
    private Image current_image_;
	private TUGLabyrinth labyrinth_;
    /**
     *
     */
    public CurrentSensorPanel(HashMap brick_images, int parent_rule, TUGLabyrinth labyrinth) {
        super();
				labyrinth_=labyrinth;
        parent_rule_ = parent_rule;
        brick_images_ = brick_images;
        internal_state_ = EMPTY_FLOOR;
        current_image_ = (Image) brick_images_.get("EMPTY_FLOOR");
        // TODO Auto-generated constructor stub
        initMouseListener();
    }

    public CurrentSensorPanel(HashMap brick_images, int init_state, int parent_rule, TUGLabyrinth labyrinth) {
        super();
		labyrinth_=labyrinth;
        parent_rule_ = parent_rule;
        brick_images_ = brick_images;
        setInternalState(init_state);
        // TODO Auto-generated constructor stub
        initMouseListener();
    }

    public void paintComponent(Graphics g) {

        super.paintComponent(g);

        g.drawImage(current_image_, 0, 0, this);

    }

    private void setInternalState(int new_state) {

//        if ((new_state >= EMPTY_FLOOR) && (new_state < STATE_COUNT))
        if (new_state >= EMPTY_FLOOR)
            internal_state_ = new_state;

        paintState();
    }

    public int getInternalState() {
        return internal_state_;
    }

    private void paintState() {
        switch (internal_state_) {
        case EMPTY_FLOOR:
            current_image_ = (Image) brick_images_.get("EMPTY_FLOOR");
						this.setToolTipText("Anklicken um den Zustand zu ändern.");
            break;
        case FLOOR_0:
            current_image_ = (Image) brick_images_.get("FLOOR_0");
						this.setToolTipText("Markierung: "+labyrinth_.mark_array_.getFromInt(internal_state_-1));
            break;
        case FLOOR_1:
            current_image_ = (Image) brick_images_.get("FLOOR_1");
						this.setToolTipText("Markierung: "+labyrinth_.mark_array_.getFromInt(internal_state_-1));
            break;
        case FLOOR_2:
            current_image_ = (Image) brick_images_.get("FLOOR_2");
						this.setToolTipText("Markierung: "+labyrinth_.mark_array_.getFromInt(internal_state_-1));
            break;
        case FLOOR_3:
            current_image_ = (Image) brick_images_.get("FLOOR_3");
						this.setToolTipText("Markierung: "+labyrinth_.mark_array_.getFromInt(internal_state_-1));
            break;
				default:
						current_image_ = (Image) brick_images_.get("FLOOR_4");
						this.setToolTipText("Markierung: "+labyrinth_.mark_array_.getFromInt(internal_state_-1));
						break;
        }
        CurrentSensorPanel.this.repaint();
    }

    private void initMouseListener() {
        this.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {

                internal_state_ = (internal_state_ + 1) % (STATE_COUNT);
                SqlCommunicator.add_log("Rule " + Integer.toString(parent_rule_) + ": Floor sensor changed to " + Integer.toString(internal_state_));
                //System.out.println("Internal State: "+internal_state_ );
                paintState();
            }
        });
    }
}
