/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ctecinf.view;

import br.com.ctecinf.swing.Image;
import br.com.ctecinf.table.Table;
import br.com.ctecinf.table.TableModel;
import br.com.ctecinf.text.NumberFormatter;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 *
 * @author Cássio Conceição
 * @since 29/05/2019
 * @version 201905
 * @see http://ctecinf.com.br/
 */
public class SimuladorJurosPanel extends JPanel implements ActionListener {

    private static final double JURO = 1.00;
    private static final double MULTIPLICADOR = (JURO / 100.00) + 1.00;
    private TableModel model;
    private JFormattedTextField field;

    public SimuladorJurosPanel() {
        super(new BorderLayout());
        initUI();
    }

    private void initUI() {

        field = new JFormattedTextField(new NumberFormatter(2));
        field.setColumns(10);

        JButton button = new JButton("Calcular", Image.parse(Image.EDIT, 16));
        button.addActionListener(this);

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel.add(new JLabel("Valor:"));
        panel.add(field);
        panel.add(button);

        model = new TableModel();
        model.addColumn("Nro. de Parcelas", Integer.class);
        model.addColumn("Valor Total", Double.class);
        model.addColumn("Valor Parcela", Double.class);
        model.addRow(new Object[]{1, 0.0, 0.0});
        model.addRow(new Object[]{2, 0.0, 0.0});
        model.addRow(new Object[]{3, 0.0, 0.0});
        model.addRow(new Object[]{4, 0.0, 0.0});
        model.addRow(new Object[]{5, 0.0, 0.0});
        model.addRow(new Object[]{6, 0.0, 0.0});
        model.addRow(new Object[]{7, 0.0, 0.0});
        model.addRow(new Object[]{8, 0.0, 0.0});
        model.addRow(new Object[]{9, 0.0, 0.0});
        model.addRow(new Object[]{10, 0.0, 0.0});
        model.addRow(new Object[]{11, 0.0, 0.0});
        model.addRow(new Object[]{12, 0.0, 0.0});

        Table table = new Table(model);

        add(panel, BorderLayout.NORTH);
        add(new JScrollPane(table), BorderLayout.CENTER);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        for (Object o : model.getData()) {

            Object[] objects = (Object[]) o;

            int exp = Integer.parseInt(objects[0].toString());

            double valor = ((Number) field.getValue()).doubleValue();
            double total = Math.pow(MULTIPLICADOR, exp) * valor;

            objects[1] = total;
            objects[2] = total / exp;
        }

        model.fireTableDataChanged();
    }

}
