// Exercise11_10.java: Compute sales commissions
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class Exercise11_10 extends JFrame implements ActionListener
{
  private JTextField jtfSalesAmount = new JTextField(15);
  private JTextField jtfCommissions = new JTextField(15);

  // Main method
  public static void main(String[] args)
  {
    Exercise11_10 frame = new Exercise11_10();
    frame.setSize(300, 200);
    frame.setTitle("Exercise 11.10: Compute Sales Commissions");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }

  public Exercise11_10()
  {
    // Panel p1 to hold text fields
    JPanel p1 = new JPanel();
    p1.setLayout(new GridLayout(2, 2));
    p1.add(new JLabel("Sales Amount"));
    p1.add(jtfSalesAmount);
    p1.add(new JLabel("Commissions"));
    p1.add(jtfCommissions);

    // Set border title
    p1.setBorder(new TitledBorder("Sales Amount and Commissions"));

    // Panel p2 to hold commission rates
    JPanel p2 = new JPanel();
    p2.setLayout(new GridLayout(4, 2));
    p2.add(new JLabel("Sales Amount"));
    p2.add(new JLabel("Commission Rate"));
    p2.add(new JLabel("$1 to $5,000"));
    p2.add(new JLabel("8 Percent"));
    p2.add(new JLabel("$5,001 to $10,000"));
    p2.add(new JLabel("10 Percent"));
    p2.add(new JLabel("Above $10,000"));
    p2.add(new JLabel("12 Percent"));

    // Set border title
    p2.setBorder(new TitledBorder("Commission Rates"));

    getContentPane().add(p1, BorderLayout.CENTER);
    getContentPane().add(p2, BorderLayout.SOUTH);

    // Register listener for the scroll bars
    jtfSalesAmount.addActionListener(this);
    jtfCommissions.addActionListener(this);
  }

  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == jtfSalesAmount)
    {
      double salesAmount =
        new Double(jtfSalesAmount.getText().trim()).doubleValue();

      double commission = 0;
      if (salesAmount <= 5000)
        commission = salesAmount*0.08;
      else if (salesAmount <= 10000)
        commission = (salesAmount-5000)*0.1 + 5000*0.08;
      else
        commission = (salesAmount-10000)*0.12 +
          5000*0.1 +5000*0.08;

      // Display commission on the text field
      jtfCommissions.setText(new Double(commission).toString());
    }
    else if (e.getSource() == jtfCommissions)
    {
      double COMMISSIONSOUGHT =
        new Double(jtfCommissions.getText().trim()).doubleValue();

      double commission = 0;
      double salesAmount = 1;
      while (commission < COMMISSIONSOUGHT)
      {
        // Compute commission
        if (salesAmount >= 10001)
          commission = 5000*0.08 + 5000*0.1 + (salesAmount-10000)*0.12;
        else if (salesAmount >= 5001)
          commission = 5000*0.08 + (salesAmount-5000)*0.10;
        else
          commission = salesAmount*0.08;

        salesAmount++;
      }

      // Display sales amount on the text field
      jtfSalesAmount.setText(new Double(salesAmount).toString());
    }
  }
}
