package view.panels.tabs;

import com.sun.istack.internal.Nullable;
import view.panels.PlotPanel;

import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;

/**
 * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
 *
 * @Author: Armin Wolf
 * @Email: a_wolf28@uni-muenster.de
 * @Date: 02.06.2017.
 */
public class LMSPanel extends TabPanel {


    private JLabel[] labels;
    private JTextField[] input;
    private JPanel continer;

    private GridBagConstraints gbc;

    public LMSPanel() {
        super();
        this.labels = new JLabel[2];
        this.input = new JTextField[2];

        this.continer = new JPanel();
        this.continer.setLayout(new GridBagLayout());

        this.gbc = new GridBagConstraints();
        this.gbc.anchor = GridBagConstraints.NORTH;
        this.gbc.fill = GridBagConstraints.HORIZONTAL;

        addTextfieldAndInput(0, "Konstante", 0.5);
        addTextfieldAndInput(1, "Fehler", 0.05);

        addButton(2, getStartButton());

        getNorthPanel().add(continer, BorderLayout.CENTER);
        this.add(getNorthPanel(), BorderLayout.NORTH);
        this.add(getCenterPanel(), BorderLayout.CENTER);
    }


    @Override
    protected void addTextfieldAndInput(int row, String name, Double value) {
        this.labels[row] = new JLabel(name);
        this.labels[row].setFont(new Font("SansSerif", Font.PLAIN, 12));
        this.input[row] = new JTextField();
        this.input[row].setText("" + value);

        gbc.insets = new Insets(0, 5, 0, 0);
        gbc.gridx = 0;
        gbc.gridy = row;
        gbc.weightx = 0.05;
        gbc.weighty = 0.05;
        continer.add(this.labels[row], gbc);

        gbc.gridx = 1;
        gbc.gridy = row;
        gbc.weightx = 0.9;
        gbc.weighty = 0.05;
        gbc.insets = new Insets(0, 0, 0, 5);
        continer.add(this.input[row], gbc);
    }

    private void addButton(int row, JButton button) {
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        gbc.insets = new Insets(30, 0, 5, 0);

        gbc.gridx = 0;
        gbc.gridy = row;
        gbc.weightx = 0.05;
        gbc.weighty = 0.05;
        gbc.gridwidth = 1;
        buttonPanel.add(button);
        continer.add(buttonPanel, gbc);
    }


    @Nullable
    public String[] getInput() {
        String[] input = new String[3];
        input[0] = this.input[0].getText();
        input[1] = this.input[1].getText();

        if (isNumeric(input[0]) && isNumeric(input[1])) {
            return input;
        } else {
            JOptionPane.showMessageDialog(this, "Bitte geben Sie numerische Werte als Parameter an.", "Fehler bei der Eingabe", JOptionPane.ERROR_MESSAGE);
            return null;
        }
    }

    public boolean isNumeric(String str) {
        try {
            double d = Double.parseDouble(str);
        } catch (NumberFormatException nfe) {
            return false;
        }
        return true;
    }
}
