package edu.schoo.mailbox;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Font;
import java.awt.TextArea;

import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextArea;
import javax.swing.JSeparator;
/**
 * Информатика, 8 клас, издателство Просвета, 2017
 * Автори: Светла Бойчева, Николина Николова, Елиза Стефанова, Антон Денев
 * Урок 3.6.1.2. Въвеждане, извеждане и обхождане на едномерен масив
 * Задача: RxC001 иска да направи интелигентни пощенски кутии
 * в жилищната сграда, в която живее. Те трябва да имат сензор и 
 * да подават сигнал, когато са препълнени. Помогнете на RxC001 да
 * направи приложение MailBox, с което да следи броя писма във всяка пощенска кутия.
 *  
 * Версия 1.
 */

public class MailBoxJFrame extends JFrame {


	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JButton btnOutput;
	private JButton btnInput;

	
	/**
	 * Launch the application.
	 */
	// Максимален брой писма, които може да побира пощенска кутия
	final int MAX_CAPACITY = 10;
	
	// масив, в който се записва брой писма в пощенските кутии
	int[] mailBox = new int[6];


	private JTextField txtNewMail;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {

				try {
					MailBoxJFrame frame = new MailBoxJFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public MailBoxJFrame() {
		setTitle("\u041F\u043E\u0449\u0435\u043D\u0441\u043A\u0438 \u043A\u0443\u0442\u0438\u0438");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 477, 342);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(204, 255, 204));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		txtNewMail = new JTextField();
		txtNewMail.setFont(new Font("Tahoma", Font.PLAIN, 14));
		txtNewMail.setBounds(223, 200, 82, 40);
		contentPane.add(txtNewMail);
		txtNewMail.setColumns(10);

		JList<String> listMailBox = new JList<String>();
		AbstractListModel abstractListModel = new AbstractListModel() {
			String[] values = new String[] {};

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

			public Object getElementAt(int index) {
				return values[index];
			}
		};
		listMailBox.setModel(abstractListModel);
		listMailBox.setBounds(20, 11, 187, 276);
		contentPane.add(listMailBox);

		JButton btnNewMail = new JButton("\u041D\u041E\u0412\u0410 \u041F\u041E\u0429\u0410");
		btnNewMail.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				// Нова поща
				// Проверява коя кутия (елемент от списъчното поле) е избрана
				// за избраната кутия увеличава стойността с въведената  стойност
				// в текстово поле, т.е. "пуска" съответния брой писма в пощенската кутия
				int index = listMailBox.getSelectedIndex();
				if (index > -1) {
					mailBox[index] += Integer.parseInt(txtNewMail.getText());
					DefaultListModel<String> model = 
							(DefaultListModel<String>) listMailBox.getModel();
					String message = String.format("п.к. [%d]: %d", 
							                        index, mailBox[index]);
					model.setElementAt(message, index);
				}

			}
		});
		btnNewMail.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnNewMail.setBounds(309, 199, 132, 40);
		contentPane.add(btnNewMail);

		JButton btnEmptyBox = new JButton(
				"\u0418\u0417\u041F\u0420\u0410\u0417\u041D\u0418 \u041A\u0423\u0422\u0418\u042F\u0422\u0410");
		btnEmptyBox.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				// изпразване на кутията
				// Проверява коя кутия (елемент от списъчното поле) е избрана
				// за избраната кутия задава стойност нула,
				// т.е. "прибира"  писмата от пощенската кутия
				int index = listMailBox.getSelectedIndex();
				if (index > -1) {
					mailBox[index] = 0;
					DefaultListModel<String> model = 
							(DefaultListModel<String>) listMailBox.getModel();
					String message = String.format("п.к. [%d]: %d", 
							                        index, mailBox[index]);
					model.setElementAt(message, index);
				}

			}
		});
		btnEmptyBox.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnEmptyBox.setBounds(223, 247, 218, 40);
		contentPane.add(btnEmptyBox);

		JButton btnFullBoxes = new JButton(
				"\u041F\u0420\u0415\u041F\u042A\u041B\u041D\u0415\u041D\u0418 \u041A\u0423\u0422\u0418\u0418");
		btnFullBoxes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				// показване на препълнените кутии
				String fullBoxes = "";
				for (int i = 0; i < mailBox.length; i++) {
					if (mailBox[i] >= MAX_CAPACITY)
						fullBoxes += " : " + Integer.toString(i);
				}
				if (fullBoxes == "") {
					fullBoxes = "няма препълнени пощенски кутии!";
				} else {
					fullBoxes = "препълнени пощенски кутии: " + fullBoxes;
				}
				JOptionPane.showMessageDialog(null, fullBoxes);

			}
		});
		btnFullBoxes.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnFullBoxes.setBounds(226, 51, 215, 29);
		contentPane.add(btnFullBoxes);

		JButton btnBills = new JButton(
				"\u0421\u042A\u041E\u0411\u0429\u0415\u041D\u0418\u042F \u0417\u0410 \u0421\u041C\u0415\u0422\u041A\u0418");
		btnBills.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				// пускане на съобщения за сметки във всички кутии
				DefaultListModel<String> model = new DefaultListModel<String>();
				String message;
				for (int i = 0; i < mailBox.length; i++) {
					mailBox[i]++;
					message = String.format("п.к. [%d]: %d", i, mailBox[i]);
					model.addElement(message);
				}
				listMailBox.setModel(model);

			}
		});
		btnBills.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnBills.setBounds(226, 87, 215, 29);
		contentPane.add(btnBills);

		btnOutput = new JButton(
				"\u041F\u041E\u041A\u0410\u0416\u0418 \u0412\u0421\u0418\u0427\u041A\u0418 \u041A\u0423\u0422\u0418\u0418");
		btnOutput.addActionListener(new ActionListener() {
			private TextArea textArea;

			public void actionPerformed(ActionEvent arg0) {

				// създаване на празен модел
				DefaultListModel<String> model = 
						new DefaultListModel<String>();
				// извеждане в новия модел на стойностите на
				// елементите на масива чрез обхождане
				String output;
				for (int i = 0; i < mailBox.length; i++) {
					output = String.format("п.к. [%d]: %d \n", 
							                i, mailBox[i]);
					model.addElement(output);
				}
				// "свързване" на новия модел и модела
				// на списъчното поле
				listMailBox.setModel(model);

				btnNewMail.setVisible(true);

				btnBills.setVisible(true);
				txtNewMail.setVisible(true);
				btnEmptyBox.setVisible(true);

			}

		});
		btnOutput.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnOutput.setBounds(226, 11, 215, 29);
		contentPane.add(btnOutput);

		btnInput = new JButton(
				"\u0412\u042A\u0412\u0415\u0414\u0418  \u0421\u0422\u041E\u0419\u041D\u041E\u0421\u0422\u0418");
		btnInput.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				// Въвеждане на стойности на елементите на масива чрез последователно обхождане
				// брой писма за всяка пощенска кутия
				String input, message;
				for (int i = 0; i < mailBox.length; i++) {
					message = String.format("п.к. %d: ", i);
					input = JOptionPane.showInputDialog(message);
					mailBox[i] = Integer.parseInt(input);
				}

				btnOutput.setVisible(true);
				btnFullBoxes.setVisible(true);

			}

		});
		btnInput.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnInput.setBounds(226, 127, 215, 29);
		contentPane.add(btnInput);

		JSeparator separator = new JSeparator();
		separator.setBounds(223, 181, 218, 2);
		contentPane.add(separator);
		
		JTextArea textArea = new JTextArea();
		textArea.setBounds(6, 214, 4, 16);
		contentPane.add(textArea);

	}
}
