package edu.school.grades;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.SystemColor;
import javax.swing.JList;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;
/**
 * Информатика, 8 клас, издателство Просвета, 2017
 * Автори: Светла Бойчева, Николина Николова, Елиза Стефанова, Антон Денев
 * Урок 3.6.2.1. Сума и произведение на елементите на едномерен масив
 * Задача: Да се направи приложение Grades, което
 * по зададени оценки на ученик по предметите, изучавани в училище, да намира средния
 * успех на ученика.
 * 
 * Вариант 1.
 */
public class GradesFrame extends JFrame {

	private final class AbstractListModelExtension extends AbstractListModel {
		String[] values = new String[] {
				"\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438 \u0435\u0437\u0438\u043A",
				"\u041B\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430",
				"\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430",
				"\u0424\u0438\u0437\u0438\u043A\u0430 \u0438 \u0430\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F",
				"\u0425\u0438\u043C\u0438\u044F \u0438 \u043E\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043E\u043A\u043E\u043B\u043D\u0430\u0442\u0430 \u0441\u0440\u0435\u0434\u0430",
				"\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F \u0438 \u0437\u0434\u0440\u0430\u0432\u043D\u043E \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435",
				"\u0413\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u044F \u0438 \u0438\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430",
				"\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0438 \u0446\u0438\u0432\u0438\u043B\u0438\u0437\u0430\u0446\u0438\u0438",
				"\u041C\u0443\u0437\u0438\u043A\u0430",
				"\u0418\u0437\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u0435\u043B\u043D\u043E \u0438\u0437\u043A\u0443\u0441\u0442\u0432\u043E",
				"\u0427\u0443\u0436\u0434 \u0435\u0437\u0438\u043A",
				"\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043A\u043E \u0432\u044A\u0437\u043F\u0438\u0442\u0430\u043D\u0438\u0435",
				"\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430",
				"\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u0438 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438" };

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

		public Object getElementAt(int index) {
			return values[index];
		}
	}

	private JPanel contentPane;
	private JList<String> lstSubjects;
	private JList<String> lstGrades;
	private JButton btnGtrades;
	private JButton btnAverage;
	private JLabel lblAverage;

    // Едномерен масив с оценки по предметите
	int[] grades = { 5, 4, 6, 6, 5, 5, 4, 3, 4, 6, 6, 6, 6, 6 };

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

	/**
	 * Create the frame.
	 */
	public GradesFrame() {
		setTitle("\u0421\u0440\u0435\u0434\u0435\u043D \u0443\u0441\u043F\u0435\u0445");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 517, 363);
		contentPane = new JPanel();
		contentPane.setBackground(SystemColor.activeCaption);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		lstSubjects = new JList<String>();
		lstSubjects.setModel(extracted());
		lstSubjects.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lstSubjects.setBounds(10, 46, 250, 273);
		contentPane.add(lstSubjects);

		lstGrades = new JList<String>();
		lstGrades.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lstGrades.setBounds(268, 46, 62, 273);
		contentPane.add(lstGrades);

		JLabel lblNewLabel = new JLabel("\u041F\u0440\u0435\u0434\u043C\u0435\u0442\u0438");
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblNewLabel.setBounds(10, 11, 146, 30);
		contentPane.add(lblNewLabel);

		JLabel label = new JLabel("\u041E\u0446\u0435\u043D\u043A\u0438");
		label.setFont(new Font("Tahoma", Font.BOLD, 14));
		label.setBounds(268, 11, 62, 30);
		contentPane.add(label);

		btnGtrades = new JButton("\u041E\u0446\u0435\u043D\u043A\u0438");
		btnGtrades.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				// дефинира модел и с последователно обхождане на масива добавя в модела
				// елементите на месива 
				DefaultListModel<String> model = new DefaultListModel<String>();
				for (int i = 0; i < grades.length; i++) {
					String message = Integer.toString(grades[i]);
					model.add(i, message);
				}

				// показва стойностите от модела в списъчното поле
				lstGrades.setModel(model);
			}
		});
		btnGtrades.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnGtrades.setBounds(358, 38, 133, 45);
		contentPane.add(btnGtrades);

		btnAverage = new JButton("\u041F\u0440\u0435\u0441\u043C\u0435\u0442\u043D\u0438");
		btnAverage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				// намира сумата на елементите на масива
				// чрез последователно обхождане на елементите
				// и натрупване на стойностите им в sum

				int sum = 0;
				for (int i = 0; i < grades.length; i++) {
					sum += grades[i];
				}

				// средно аритметично на оценките
				double average = (double)sum /  grades.length;

				// форматиране на резултата с точност до втория знак след десетичната запетая
				String message = String.format("%3.2f", average);
				lblAverage.setText(message.replace('.', ','));
			}
		});
		btnAverage.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnAverage.setBounds(358, 104, 133, 45);
		contentPane.add(btnAverage);

		JLabel label_1 = new JLabel("\u0421\u0440\u0435\u0434\u0435\u043D \u0443\u0441\u043F\u0435\u0445:");
		label_1.setFont(new Font("Tahoma", Font.BOLD, 14));
		label_1.setBounds(368, 160, 120, 30);
		contentPane.add(label_1);

		lblAverage = new JLabel("");
		lblAverage.setFont(new Font("Tahoma", Font.BOLD, 16));
		lblAverage.setBounds(368, 201, 94, 30);
		contentPane.add(lblAverage);
	}

	private AbstractListModel<String> extracted() {
		return new AbstractListModelExtension();
	}
}
