package osBridge;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ControlPanel extends JPanel{

   private final OsBridge controller;

   private boolean runThreads = true;

   private double pChance = 0.5;
   private double yChance = 0.5;

   public ControlPanel(OsBridge inCont){
      
      setLayout(new GridLayout(3,1,5,5));
      
      JPanel intPanelA = new JPanel();
      intPanelA.setLayout(new GridLayout(4,1,5,5));
      JCheckBox tmpCB;

      tmpCB = new JCheckBox("Allow Starvation",false);
      tmpCB.addItemListener(new ItemListener(){
	    public void itemStateChanged(ItemEvent e){
	       controller.setAllowStarvation( ((JCheckBox)e.getSource()).isSelected());
	    }
	 });
      intPanelA.add( tmpCB ); 


      tmpCB = new JCheckBox("Use Mutexes",true);
      tmpCB.addItemListener(new ItemListener(){
	    public void itemStateChanged(ItemEvent e){
	       controller.setUseMutexes( ((JCheckBox)e.getSource()).isSelected());
	    }
	 });
      intPanelA.add( tmpCB ); 

      tmpCB = new JCheckBox("Run Threads",true);
      tmpCB.addItemListener(new ItemListener(){
	    public void itemStateChanged(ItemEvent e){
	       controller.setThreadsRunning( ((JCheckBox)e.getSource()).isSelected());
	       runThreads = ((JCheckBox) e.getSource()).isSelected();
   	    }
	 });
      intPanelA.add( tmpCB ); 

      JButton tmpJB;

      tmpJB = new JButton("Pulse Update");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    controller.pulseUpdate();
	 }
      });	    


      intPanelA.add( tmpJB ); 

      JPanel intPanelC = new JPanel();
      intPanelC.setLayout(new GridLayout(2,2,5,5));

      tmpJB = new JButton("Add Yellow");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    controller.addYellow();
	 }
      });	    
      intPanelC.add( tmpJB );   


      tmpJB = new JButton("Pulse Yellow");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    controller.pulseYellow();
	 }
      });	    
      intPanelC.add( tmpJB );   

      tmpJB = new JButton("Add Purple");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    controller.addPurple();
	 }
      });	    
      intPanelC.add( tmpJB );   

      tmpJB = new JButton("Pulse Purple");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    controller.pulsePurple();
	 }
      });	    
      intPanelC.add( tmpJB );   
 

      JPanel intPanelB = new JPanel();      

      intPanelB.setLayout(new GridLayout(4,2,5,5));

      final JTextField PSleep = new JTextField("100",4);
      tmpJB = new JButton("Purple Sleep");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    try{
	       controller.setPThreadSleep(Integer.parseInt(PSleep.getText()));
	    }catch(Exception ex){
	    }
	 }
      });	    
      intPanelB.add( tmpJB );
      intPanelB.add( PSleep );

      final JTextField YSleep = new JTextField("100",4);
      tmpJB = new JButton("Yellow Sleep");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    try{
	       controller.setYThreadSleep(Integer.parseInt(YSleep.getText()));
	    }catch(Exception ex){
	    }
	 }
      });	    
      intPanelB.add( tmpJB ); 
      intPanelB.add( YSleep);

      final JTextField PChance = new JTextField("0.5",4);
      tmpJB = new JButton("Purple Chance");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    try{
	      pChance = Double.parseDouble(PChance.getText());
	    }catch(Exception ex){
	    }
	 }
      });	    
      intPanelB.add( tmpJB  ); 
      intPanelB.add( PChance);

      final JTextField YChance = new JTextField("0.5",4);
      tmpJB = new JButton("Yellow Chance");
      tmpJB.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
	    try{
	      yChance = Double.parseDouble(YChance.getText());
	    }catch(Exception ex){
	    }
	 }
      });	    
      intPanelB.add( tmpJB  ); 
      intPanelB.add( YChance);

      controller = inCont;  

      add(intPanelA);
      add(intPanelC);
      add(intPanelB);
      //pack();
      Thread t = new Thread( new Runnable(){
	       public void run(){
	       while(true){
	       while(runThreads){
		  if(Math.random() < pChance){
		     controller.addPurple();
		  }

		  if(Math.random() < yChance){
		     controller.addYellow();
		  }
		  try{
		     Thread.sleep(250);
		  }catch(Exception e){
		  }
	       }
		  try{
		     Thread.sleep(250);
		  }catch(Exception e){
		  }
	       }
	       }

	    });

      t.start();
   } 

   
}



