/* Unos.java
 *
 * Program prijazuje prozor za unos korisnika -- ime, prezime i spol.
 * Kad je korisnik unesen, dodaje ga se na kraj datoteke korisnici.txt.
 * Polja za unos se brisu i spremaju za unos novog korisnika.
 *
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Unos extends JPanel implements ActionListener {
    private JTextField imeField, prezimeField;
    private JRadioButton muskoButton, zenskoButton, nistaButton;
    private ButtonGroup spolGroup;

    public Unos() {
	// BoxLayout slaze komponente kao u kutiju. Slican je FlowLayoutu,
	// ali...
	setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

	// gumbPanel nam treba kako bi gumb bio lijepo poravnat.
	JPanel gumbPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
	JButton gumb = new JButton("Spremi");

	gumb.addActionListener(this);
	gumbPanel.add(gumb);

	// dodamo i border
	gumbPanel.setBorder(BorderFactory.createEmptyBorder(0,0,5,5));

	// panel unosPanel sadrzi sva potrebna polja za unos. Koristimo
	// SpringLayout koji je pogodan u nasem slucaju.
	SpringLayout layout = new SpringLayout();
	JPanel unosPanel = new JPanel(layout);

	JLabel imeLabel = new JLabel("Ime:",JLabel.RIGHT);
	JLabel prezimeLabel = new JLabel("Prezime:",JLabel.RIGHT);
	JLabel spolLabel = new JLabel("Spol:",JLabel.RIGHT);
	spolGroup = new ButtonGroup();
	JPanel spolPanel = new JPanel();

	imeField = new JTextField(15);
	prezimeField = new JTextField(15);

	muskoButton = new JRadioButton("M");
	zenskoButton = new JRadioButton("Z");
	nistaButton = new JRadioButton("nista",true /* selected */);

	// nistaButton je ovdje da omogucimo da ostala dva budu neselektirana.
	nistaButton.setVisible(false);

	spolGroup.add(muskoButton);
	spolGroup.add(zenskoButton);
	spolGroup.add(nistaButton);
	
	spolPanel.add(muskoButton);
	spolPanel.add(zenskoButton);
	spolPanel.add(nistaButton);

	unosPanel.add(imeLabel);
	unosPanel.add(imeField);
	unosPanel.add(prezimeLabel);
	unosPanel.add(prezimeField);
	unosPanel.add(spolLabel);
	unosPanel.add(spolPanel);

	// Slijedi lijepo poravnavanje komponenata.
	SpringLayout.Constraints consImeLabel = layout.getConstraints(imeLabel);
	SpringLayout.Constraints consPrezimeLabel = layout.getConstraints(prezimeLabel);
	SpringLayout.Constraints consSpolLabel = layout.getConstraints(spolLabel);
	SpringLayout.Constraints consImeField = layout.getConstraints(imeField);
	SpringLayout.Constraints consPrezimeField = layout.getConstraints(prezimeField);
	SpringLayout.Constraints consSpolPanel = layout.getConstraints(spolPanel);
	
	Spring x = Spring.constant(10);
	Spring y = Spring.constant(10);
	Spring xPad = Spring.constant(10);
	Spring yPad = Spring.constant(5);
	
	consImeLabel.setX(x);
	consPrezimeLabel.setX(x);
	consSpolLabel.setX(x);
	
	Spring width = consPrezimeLabel.getWidth(); // Najsira labela
	consImeLabel.setWidth(width);
	consSpolLabel.setWidth(width);

	x = Spring.sum(x,Spring.sum(width,xPad));
	
	consImeField.setX(x);
	consPrezimeField.setX(x);
	consSpolPanel.setX(x);
	
	width = consImeField.getWidth();
	consPrezimeField.setWidth(width);
	consSpolPanel.setWidth(width);

	x = Spring.sum(x,Spring.sum(width,xPad));

	consImeLabel.setY(y);
	consImeField.setY(y);

	Spring height = consImeField.getHeight();
	consImeLabel.setHeight(height);

	y = Spring.sum(y,Spring.sum(height,yPad));

	consPrezimeLabel.setY(y);
	consPrezimeField.setY(y);

	consPrezimeLabel.setHeight(height);
	consPrezimeField.setHeight(height);
	
	y = Spring.sum(y,Spring.sum(height,yPad));

	consSpolLabel.setY(y);
	consSpolPanel.setY(y);

	//consSpolPanel.setHeight(layout.getConstraints(muskoButton).getHeight());
	height = Spring.max(consSpolLabel.getHeight(),consSpolPanel.getHeight());
	consSpolLabel.setHeight(height);
	consSpolPanel.setHeight(height);

	y = Spring.sum(y,Spring.sum(height,yPad));

	SpringLayout.Constraints consUnosPanel = layout.getConstraints(unosPanel);
	consUnosPanel.setConstraint(SpringLayout.SOUTH,y);
	consUnosPanel.setConstraint(SpringLayout.EAST,x);
	
	add(unosPanel);
	add(gumbPanel);
    }

    public void actionPerformed(ActionEvent e) {
	// Zapisimo korisnika u datoteku
	PrintWriter fileOut = null;
	
	if ("".equals(imeField.getText())) {
	    JOptionPane.showMessageDialog(null,"Niste unijeli ime!","Greska",JOptionPane.WARNING_MESSAGE);
	    imeField.requestFocus();
	    return;
	}

	if ("".equals(prezimeField.getText())) {
	    JOptionPane.showMessageDialog(null,"Niste unijeli prezime!","Greska",JOptionPane.WARNING_MESSAGE);
	    prezimeField.requestFocus();
	    return;
	}

	if (nistaButton.isSelected()) {
	    JOptionPane.showMessageDialog(null,"Niste odabrali spol!","Greska",JOptionPane.WARNING_MESSAGE);
	    muskoButton.requestFocus();
	    return;
	}
	
	try {
	    fileOut = new PrintWriter(new FileOutputStream("korisnici.txt",true /*append*/));

	    fileOut.println(imeField.getText()+"*"+prezimeField.getText()+"*"+(muskoButton.isSelected()?"M":"Z"));

	    imeField.setText(null);
	    prezimeField.setText(null);
	    nistaButton.setSelected(true);

	    imeField.requestFocus();
	}
	catch (Exception exc) {
	    exc.printStackTrace();
	}
	finally {
	    if (fileOut!=null) fileOut.close();
	}	
    }
	
    /**
     * main je ovdje da stvori "teski" kontejner i
     * nalijepi na njega nas panel Unos.
     */
    public static void main(String[] args) {
	JFrame frame = new JFrame("Unos korisnika");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	frame.getContentPane().add(new Unos());

	frame.pack();
	frame.setVisible(true);
    }
}
