package personsorter;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;
import java.util.Comparator;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class PersonSorterGUI extends JFrame {

	Vector<Person> persons = new Vector<Person>();
	int width = 500;
	int height = 500;

	public PersonSorterGUI() {
		setPreferredSize(new Dimension(width, height));
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setData();
		addControls();
		center();
		pack();
	}

	void setData() {
		persons.add(new Person("Pera", "Peric", 1980));
		persons.add(new Person("Mitar", "Miric", 1989));
		persons.add(new Person("Petar", "Miric", 1989));
		persons.add(new Person("Mitar", "Miric", 1986));
		persons.add(new Person("Saban", "Saulic", 1983));
		persons.add(new Person("Marko", "Markovic", 1984));
	}

	private void addControls() {
		GridLayout gridLayout = new GridLayout(2, 1);
		setLayout(gridLayout);
		JList<Person> namesList = new JList<Person>(persons);

		/* scroll pane se koristi za dodavanje
		 * scroll bar-ova u slucaju da elementi ne staju u listu
		 */
		JScrollPane scrollPane = new JScrollPane(namesList);
		add(scrollPane);

		JButton btnSortByLastName = new JButton("Sortiraj po prezimenu");
		JButton btnSortByYear = new JButton("Sortiraj po godini");

		btnSortByLastName.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				Collections.sort(persons);
				repaint();
			}
		});

		/*
		 * koristimo dodatni panel samo da bi lepse organizovali dugmice, jer na
		 * JFrame ne mozemo postaviti vise od 1 layout-a
		 */
		/*
		 * podrazumevani layout za panel bi trebalo da je flow layout. on
		 * rasporedjuje komponente s leva na desno odozgo na dole, i uzima za
		 * njih neke njihove podrazumevane dimenzije (ne siri ih preko cele
		 * komponente)
		 */
		JPanel buttonPanel = new JPanel();
		add(buttonPanel);

		btnSortByYear.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				Collections.sort(persons, new Comparator<Person>() {
					@Override
					public int compare(Person o1, Person o2) {
						if (o1.birthYear.compareTo(o2.birthYear) != 0)
							return o1.birthYear.compareTo(o2.birthYear);
						if (o1.lastName.compareTo(o2.lastName) != 0)
							return o1.lastName.compareTo(o2.lastName);
						return o1.firstName.compareTo(o2.firstName);
					}
				});
				repaint();
			}
		});
		buttonPanel.add(btnSortByLastName);
		buttonPanel.add(btnSortByYear);
	}

	private void center() {
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation(new Point((int) (dim.getWidth() - width) / 2,
				(int) (dim.getHeight() - height) / 2));
	}

	public static void main(String[] args) {
		PersonSorterGUI gui = new PersonSorterGUI();
	}
}
