package gui;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

import controller.Instruction;
import controller.Condition;
import controller.Action;
//import controller.SqlCommunicator;

public class RulePanel extends JPanel 
{
	private RuleTreePanel parent_panel_;
	private HashMap brick_images_;
	private TUGLabyrinth labyrinth_;
	private boolean highlight_;
	private ConditionPanel condition_panel_;
	private ActionPanel acition_panel_;
	private JCheckBox active_switch_;
    private JButton delete_button_;
    private int id_;
		
	public RulePanel(HashMap brick_images, TUGLabyrinth labyrinth, int id, RuleTreePanel parent_panel) 
    {	    
		super();
		labyrinth_=labyrinth;
		parent_panel_=parent_panel;
        brick_images_ = brick_images;
        id_=id;
        highlight_=false;
        acition_panel_ = new ActionPanel(brick_images_,labyrinth_);
        condition_panel_ = new ConditionPanel(brick_images_, labyrinth_);
        initComponents();   
	}
	
	public RulePanel(HashMap brick_images, TUGLabyrinth labyrinth, Instruction instruction, int id, RuleTreePanel parent_panel) 
    {	    
		super();
		labyrinth_=labyrinth;
		parent_panel_=parent_panel;
        brick_images_ = brick_images;
        id_=id;
        highlight_=false;
        acition_panel_ = new ActionPanel(brick_images_,labyrinth_, instruction.getAction());
        condition_panel_ = new ConditionPanel(brick_images_, labyrinth_, instruction.getCondition());
        initComponents();   
	}
	
	private void initComponents() 
	{
        active_switch_ = new JCheckBox();
        delete_button_ = new JButton();
        
        this.setLayout(null);
        this.add(acition_panel_);
        this.add(condition_panel_);
        acition_panel_.setBounds(80, 25, 145, 50);
        condition_panel_.setBounds(2, 2, 84, 76);
        
        this.add(active_switch_);
        active_switch_.setBounds(190, 2, 20, 20);
        active_switch_.setOpaque(false);
        active_switch_.setSelected(true);
        
        this.add(delete_button_);
        delete_button_.setBounds(210, 6, 13, 13);
        delete_button_.setOpaque(false);
        delete_button_.setIcon((ImageIcon) brick_images_.get("X_BUTTON"));
        delete_button_.addActionListener(new java.awt.event.ActionListener() 
        	{
            public void actionPerformed(java.awt.event.ActionEvent evt) 
            {
            //	SqlCommunicator.add_log("Rule " + Integer.toString(id_) + " deleted");
                parent_panel_.deleteRule(id_);
            }
        });
        
        setBackGround();
        this.setBorder(new javax.swing.border.SoftBevelBorder(
                javax.swing.border.BevelBorder.RAISED));
        repaint();
        System.out.println("\n RulePanel  --> initComponents");  
    }
    
    public int getID() 
    {
        return id_;
    }
    
    private void setBackGround()
    {
	    if(highlight_==false)
        	this.setBackground(Color.GRAY);
        else
        	this.setBackground(Color.RED.darker());
	}
    
	public Instruction getInstruction()
	{
	  return new Instruction (condition_panel_.getCondition(), acition_panel_.getAction(), id_);
	}
	
    public void setHighlighting (boolean highlight)
    {
		highlight_=highlight;
		acition_panel_.setHighlighting(highlight_);
		condition_panel_.setHighlighting(highlight_);
		setBackGround();
		repaint();   
	}
	
	public boolean isHighlighting ()
	{
		return highlight_;
	}
}