import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PrimeGUI extends JFrame implements ActionListener {
	private NumberGenerator generator;
	private JLabel maximumValueJLabel, primeValuesJLabel;
	private JTextField maximumValueJTextField;
	private JButton calculateJButton;
	private JTextArea primesJTextArea;
	private JScrollPane primesJScrollPane;
	private JPanel upperJPanel;
	private JPanel middleJPanel;
	private JPanel lowerJPanel;
	
	public PrimeGUI(NumberGenerator generator) {
		this.generator = generator;
		setUpInterface();
	}
	
	public void setUpInterface() {
		Container contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());
		
		// creating upper panel
		maximumValueJLabel = new JLabel("Maximum Value:");
		maximumValueJTextField = new JTextField(5);
		upperJPanel = new JPanel();
		upperJPanel.add(maximumValueJLabel);
		upperJPanel.add(maximumValueJTextField);
		contentPane.add(upperJPanel, BorderLayout.NORTH);
		
		// creating the middle panel
		calculateJButton = new JButton("Calculate Primes");
		middleJPanel = new JPanel();
		middleJPanel.add(calculateJButton);
		contentPane.add(middleJPanel, BorderLayout.CENTER);
		
		// creating the lower panel
		primeValuesJLabel = new JLabel("Primes Values for specified Maximum:");
		primeValuesJLabel.setHorizontalAlignment(JLabel.CENTER);
		primesJTextArea = new JTextArea();
		primesJTextArea.setEditable(false);
		primesJScrollPane = new JScrollPane(primesJTextArea);
		primesJScrollPane.setPreferredSize(new Dimension(100,100));
		
		lowerJPanel = new JPanel();
		lowerJPanel.setLayout(new GridLayout(2,1));
		lowerJPanel.add(primeValuesJLabel);
		lowerJPanel.add(primesJScrollPane);
		contentPane.add(lowerJPanel, BorderLayout.SOUTH);
		
		// setting up listener
		calculateJButton.addActionListener(this);
		
		// final setup
		setTitle("Prime Numbers Generator");
		setSize(500,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) {
		int maximum, lineBreak = 25;
		
		maximum = Integer.parseInt(maximumValueJTextField.getText());
		int[] result = generator.getValues(maximum);
		
		primesJTextArea.setText("");
		// displaying results
		for (int i=0; i<result.length; i++) {
			primesJTextArea.append(result[i] + "");
			if (i != result.length - 1) {
				primesJTextArea.append(", ");
				if ((i % lineBreak == 0) && (i != 0)) {
					primesJTextArea.append("\n");
				}
			}		
		}
	}
}
