import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PayCheck extends JApplet
{
	private JLabel[] inL = new JLabel[10];
	private JLabel[] outL = new JLabel[10];
	private JLabel   regL  = new JLabel("Regular", SwingConstants.RIGHT);
	private JLabel   ovrL  = new JLabel("Overtime", SwingConstants.RIGHT);
	private JLabel   rateL  = new JLabel("Rate", SwingConstants.RIGHT);
	private JLabel   regPL  = new JLabel("Reg Pay", SwingConstants.RIGHT);
	private JLabel   ovrPL  = new JLabel("OT Pay", SwingConstants.RIGHT);
	private JLabel   totalL  = new JLabel("Total", SwingConstants.RIGHT);




	private JTextField[] in1_HTF = new JTextField[5];	// First "IN" Hour
	private JTextField[] in1_MTF = new JTextField[5];	// First "IN" Minute
	private JTextField[] in2_HTF = new JTextField[5];
	private JTextField[] in2_MTF = new JTextField[5];
	private JTextField[] out1_HTF = new JTextField[5];	// First "OUT" Hour
	private JTextField[] out1_MTF = new JTextField[5];	// First "OUT" Minute
	private JTextField[] out2_HTF = new JTextField[5];
	private JTextField[] out2_MTF = new JTextField[5];
	private JTextField   regTF    = new JTextField(2);
	private JTextField   ovrTF    = new JTextField(2);
	private JTextField   rateTF   = new JTextField("7.25", 2);
	private JTextField   regPTF    = new JTextField(2);
	private JTextField   ovrPTF    = new JTextField(2);
	private JTextField   totalTF    = new JTextField(2);

	private JButton buttonB;

	private ButtonHandler bHandler;

	private JLabel[] blank = new JLabel[14];
	private JLabel[] blank2 = new JLabel[15];

	public void init()
	{

		for(int x = 0; x<14; x++)
			blank[x] = new JLabel("", SwingConstants.LEFT);

		for(int x = 0; x<15; x++)
			blank2[x] = new JLabel("", SwingConstants.LEFT);

		blank2[1] = new JLabel("Monday", SwingConstants.CENTER);
		blank2[4] = new JLabel("Tuesday", SwingConstants.CENTER);
		blank2[7] = new JLabel("Wednesday", SwingConstants.CENTER);
		blank2[10] = new JLabel("Thursday", SwingConstants.CENTER);
		blank2[13] = new JLabel("Friday", SwingConstants.CENTER);

		for(int x = 0; x<10; x++)
		{
			inL[x]  = new JLabel("In", SwingConstants.RIGHT);
			outL[x] = new JLabel("Out", SwingConstants.RIGHT);
		}

		for(int x = 0; x<5; x++)
		{
			in1_HTF[x]  = new JTextField("8", 2);
			in1_MTF[x]  = new JTextField("0", 2);
			out1_HTF[x] = new JTextField("12", 2);
			out1_MTF[x] = new JTextField("0", 2);
			in2_HTF[x]  = new JTextField("1", 2);
			in2_MTF[x]  = new JTextField("0", 2);
			out2_HTF[x] = new JTextField("5", 2);
			out2_MTF[x] = new JTextField("0", 2);
		}

		buttonB = new JButton("Calculate");
		bHandler = new ButtonHandler();
		buttonB.addActionListener(bHandler);

		Container pane = getContentPane();

		pane.setLayout(new GridLayout(6,15));

		for(int x = 0; x<15; x++)
			pane.add(blank2[x]);

		for(int x = 0; x<5; x++)
		{
			pane.add(inL[x]);
			pane.add(in1_HTF[x]);
			pane.add(in1_MTF[x]);
		}

		for(int x = 0; x<5; x++)
		{
			pane.add(outL[x]);
			pane.add(out1_HTF[x]);
			pane.add(out1_MTF[x]);
		}
		for(int x = 0; x<5; x++)
		{
			pane.add(inL[x+5]);
			pane.add(in2_HTF[x]);
			pane.add(in2_MTF[x]);
		}

		for(int x = 0; x<5; x++)
		{
			pane.add(outL[x+5]);
			pane.add(out2_HTF[x]);
			pane.add(out2_MTF[x]);
		}

		pane.add(rateL);
		pane.add(rateTF);
		pane.add(regL);
		pane.add(regTF);
		pane.add(ovrL);
		pane.add(ovrTF);
		pane.add(regPL);
		pane.add(regPTF);
		pane.add(ovrPL);
		pane.add(ovrPTF);
		pane.add(totalL);
		pane.add(totalTF);
		for(int x = 0; x<2; x++)
			pane.add(blank[x]);

		pane.add(buttonB);

		setVisible(true);
	}

	private class ButtonHandler implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			double totalH = 0.0;
			//Hours
			int in1h;
			int out1h;
			int in2h;
			int out2h;
			//Minutes
			int in1m;
			int out1m;
			int in2m;
			int out2m;

			double rate = Double.parseDouble(rateTF.getText());

			for(int x = 0; x<5; x++)
			{
				in1h  = Integer.parseInt(in1_HTF[x].getText());
				out1h = Integer.parseInt(out1_HTF[x].getText());
				in1m = Integer.parseInt(in1_MTF[x].getText());
				out1m = Integer.parseInt(out1_MTF[x].getText());

				in2h  = Integer.parseInt(in2_HTF[x].getText());
				out2h = Integer.parseInt(out2_HTF[x].getText());
				in2m = Integer.parseInt(in2_MTF[x].getText());
				out2m = Integer.parseInt(out2_MTF[x].getText());
				totalH += (calcHours(in1h, out1h) + calcMins(in1m, out1m) + calcHours(in2h, out2h) + calcMins(in2m, out2m));
			}

			if(totalH > 40)
			{
				regTF.setText("40.00");
				regPTF.setText(String.format("%.2f", 40*rate));
				ovrTF.setText(String.format("%.2f", totalH - 40));
				ovrPTF.setText(String.format("%.2f", ((totalH - 40) * (rate*1.5)) ));
				totalTF.setText(String.format("%.2f", Double.parseDouble(regPTF.getText()) + Double.parseDouble(ovrPTF.getText())));
			}
			else
			{
				regTF.setText(String.format("%.2f", totalH));
				regPTF.setText(String.format("%.2f", totalH*rate));
				ovrTF.setText("");
				ovrPTF.setText("");
				totalTF.setText(String.format("%.2f", totalH*rate));
			}

		}
	}
	public int calcHours(int in, int out)
	{
		int hours;
		if(out > in)
			hours = out - in;
		else //if(in > out)
			hours = (12 - in) + out;
		if(in == 0 || out == 0)
			hours = 0;

		return hours;
	}
	public double calcMins(int in, int out)
	{
		double mins;
		if(out > in)
			mins = out - in;
		else if(in > out)
			mins = (60 - in) + out;
		else
			mins = 0;

		mins /= 60;
		if(in>out)
			mins -= 1;


		return mins;
	}

	public void paint(Graphics g)
	{
		//SimpleGUIApplet guiObject = new SimpleGUIApplet();
		//g.draw(guiObject);
		super.paint(g);
	}
}