package edu.school.sip;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.ListModel;
import javax.swing.JButton;
import java.awt.Font;
import javax.swing.border.LineBorder;
import javax.swing.UIManager;
import javax.swing.AbstractListModel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
 * Информатика, 8 клас, издателство Просвета, 2017
 * Автори: Светла Бойчева, Николина Николова, Елиза Стефанова, Антон Денев
 * Урок 3.4.1.4. Сравнение между циклични алгоритмични конструкции
 * Задача: В групите по СИП в училище може да има от 6
 * до 12 ученици включително. Ако за даден предмет има по-малко желаещи, 
 * тогава не се сформира група. Ако желаещите са повече, се сформира 
 * минималния брой групи, които могат да
 * приемат всички желаещи.
 * Създайте приложение SIP с ГПИ, което показва списък на предметите, 
 * за които има желаещи за СИП и броя кандидати.
 * Приложението трябва:
 * 1) Да проверява дали има предмети, по които
 * няма да се сформират групи за СИП.
 * 2) Да извежда информация за броя групи СИП
 * по всеки предмет, по който ще се сформира група.
 * 3) Да извежда броя на всички групи СИП, които трябва да се сформират.
 * 
 * Вариант 1.
 */

public class SIPFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					SIPFrame frame = new SIPFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public SIPFrame() {
		setTitle("\u0421\u0418\u041F");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(255, 255, 204));
		contentPane.setForeground(new Color(51, 102, 102));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new MigLayout("", "[30%][10%][45%][15%]", "[][grow][]"));

		JLabel lblSubjects = new JLabel("\u041F\u0440\u0435\u0434\u043C\u0435\u0442\u0438");
		lblSubjects.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblSubjects.setForeground(new Color(0, 102, 102));
		contentPane.add(lblSubjects, "cell 0 0");

		JLabel lblCandidates = new JLabel("\u0416\u0435\u043B\u0430\u0435\u0449\u0438");
		lblCandidates.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblCandidates.setForeground(new Color(0, 102, 102));
		contentPane.add(lblCandidates, "cell 1 0");

		JLabel lblGroups = new JLabel("\u0413\u0440\u0443\u043F\u0438");
		lblGroups.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblGroups.setForeground(new Color(0, 102, 102));
		contentPane.add(lblGroups, "cell 2 0");

		JScrollPane scrlPaneSubjects = new JScrollPane();
		contentPane.add(scrlPaneSubjects, "cell 0 1,grow");

		JList<String> lstSubjects = new JList<String>();
		lstSubjects.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lstSubjects.setModel(new AbstractListModel<String>() {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;
			String[] values = new String[] {
					"\u0410\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438 \u0435\u0437\u0438\u043A",
					"\u0411\u0415\u041B", "\u041D\u0435\u043C\u0441\u043A\u0438 \u0435\u0437\u0438\u043A",
					"\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430",
					"\u0424\u0438\u0437\u0438\u043A\u0430", "\u0425\u0438\u043C\u0438\u044F",
					"\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F",
					"\u0413\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u044F",
					"\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430",
					"\u041B\u0438\u043D\u0433\u0432\u0438\u0441\u0442\u0438\u043A\u0430",
					"\u041C\u0443\u0437\u0438\u043A\u0430", "\u0420\u0438\u0441\u0443\u0432\u0430\u043D\u0435",
					"\u041F\u0440\u0438\u043B\u043E\u0436\u043D\u0438 \u0438\u0437\u043A\u0443\u0441\u0442\u0432\u0430" };

			public int getSize() {
				return values.length;
			}

			public String getElementAt(int index) {
				return values[index];
			}
		});
		scrlPaneSubjects.setViewportView(lstSubjects);

		JScrollPane scrlNumberOfCandidates = new JScrollPane();
		contentPane.add(scrlNumberOfCandidates, "cell 1 1,grow");

		JList<String> lstNumberOfCandidates = new JList<String>();
		lstNumberOfCandidates.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lstNumberOfCandidates.setModel(new AbstractListModel<String>() {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;
			String[] values = new String[] { "7", "12", "5", "33", "6", "4", "8", "3", "15", "10", "11", "3", "6" };

			public int getSize() {
				return values.length;
			}

			public String getElementAt(int index) {
				return values[index];
			}
		});
		scrlNumberOfCandidates.setViewportView(lstNumberOfCandidates);

		JScrollPane scrlNumberOfGroups = new JScrollPane();
		contentPane.add(scrlNumberOfGroups, "cell 2 1,grow");

		JTextArea txaNumberOfGroups = new JTextArea();
		txaNumberOfGroups.setFont(new Font("Tahoma", Font.PLAIN, 11));
		scrlNumberOfGroups.setViewportView(txaNumberOfGroups);

		JLabel lblTotalGroupsText = new JLabel("\u041E\u0431\u0449\u043E \u0433\u0440\u0443\u043F\u0438: ");
		lblTotalGroupsText.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblTotalGroupsText.setForeground(new Color(0, 102, 102));
		contentPane.add(lblTotalGroupsText, "cell 0 2 2 1,alignx right");

		JLabel lblTotalGroupsNumber = new JLabel("");
		lblTotalGroupsNumber.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblTotalGroupsNumber.setForeground(new Color(0, 102, 102));
		contentPane.add(lblTotalGroupsNumber, "cell 2 2");

		JButton btnDropouts = new JButton("\u041E\u0442\u043F\u0430\u0434\u0430\u0449\u0438?");
		btnDropouts.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				final int MINIMAL_CAPACITY = 6;

				//инициализиране на модел на списъчно поле за кандидатите
				ListModel<String> modelCandidates = lstNumberOfCandidates.getModel();
				int size = modelCandidates.getSize();

				// последователно обхождане на всички предмети от списъка
				// и проверка дали за някой от тях няма по-малко кандидати от минимума
				int i = 0;
				int candidates;
				do  {
					candidates = Integer.parseInt(modelCandidates.getElementAt(i));
					i++;
				}while (i < size && candidates >= MINIMAL_CAPACITY);
				//прекъсване на цикъла при намиране на предмет, който трябва да отпадне,
				// или при проверка на всички предмети
				
				//проверка на условието за прекъсване на цикъла	
				//АКО е намерен предмет с по-малко кандидати, ТО има предмет, който трябва
				// да отпадне, ИНАЧЕ за всички предмети има достатъчен брой кандидати
				if (candidates < MINIMAL_CAPACITY) {
					JOptionPane.showMessageDialog(null, 
							"Има предмети, \n" 
							+ "по които НЯМА да се сформира СИП");
				}
				else{
					JOptionPane.showMessageDialog(null, 
							"по всички предмети\n"
							+ "ще се сформира СИП");
				}
			}
		});
		btnDropouts.setBorderPainted(false);
		btnDropouts.setBackground(UIManager.getColor("Button.background"));
		btnDropouts.setBorder(new LineBorder(new Color(51, 102, 102), 1, true));
		btnDropouts.setForeground(UIManager.getColor("Button.foreground"));
		contentPane.add(btnDropouts, "flowy,cell 3 1,aligny top");

		JButton btnGroups = new JButton("\u0413\u0440\u0443\u043F\u0438");
		btnGroups.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				final int MINIMAL_CAPACITY = 6;
				final int MAXIMAL_CAPACITY = 12;
				
				//инициализиране на модел на списъчни полета за предметите и кандидатите 				
				ListModel<String> modelSubjects = lstSubjects.getModel();
				ListModel<String> modelCandidates = lstNumberOfCandidates.getModel();
				int size = modelCandidates.getSize();
				
				int totalGroups = 0;
				String groupsResult = "";
				
				int groupsCount = 0; //брой групи по един предмет
				String record; //запис за един предмет
				
				for (int i = 0; i < size; i++){
					int candidates = Integer.parseInt(modelCandidates.getElementAt(i));
					groupsCount = candidates/MAXIMAL_CAPACITY;
					if (candidates >= MINIMAL_CAPACITY){
						if (candidates%MAXIMAL_CAPACITY != 0){
							groupsCount++; //сформира се допълнителна непълна група
						}
						record = String.format("%s: %5d\n", 
								modelSubjects.getElementAt(i), groupsCount);
					}else{
						record = "\n";			
					}
					
					totalGroups += groupsCount;
					groupsResult += record;
				}
				
				txaNumberOfGroups.setText(groupsResult);
				lblTotalGroupsNumber.setText(String.format("%d", totalGroups));
				
			}
		});
		btnGroups.setBorderPainted(false);
		btnGroups.setBackground(UIManager.getColor("Button.background"));
		btnGroups.setBorder(new LineBorder(new Color(51, 102, 102), 1, true));
		btnGroups.setForeground(UIManager.getColor("Button.foreground"));
		contentPane.add(btnGroups, "cell 3 1,growx");

		JButton btnExit = new JButton("\u0418\u0437\u0445\u043E\u0434");
		btnExit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		btnExit.setBorderPainted(false);
		btnExit.setBackground(UIManager.getColor("Button.background"));
		btnExit.setBorder(new LineBorder(new Color(51, 102, 102), 1, true));
		btnExit.setForeground(new Color(139, 0, 0));
		contentPane.add(btnExit, "cell 3 2,growx");
	}

}
