package gui;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import fachklassen.Produkt;
import fachklassen.Produktverwaltung;

public class Produkteingabe extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JTextField produktname = new JTextField(1);
    private JLabel produktnameMeldung = new JLabel();
    private JTextField preis = new JTextField(15);
    private JLabel preisMeldung = new JLabel();
    private JButton uebernahme = new JButton("\u00dcbernehmen");
    private JLabel validiert = new JLabel();

    private Produktverwaltung verwaltung;

    public Produkteingabe() {
        super("Produkteingabe");
        super.setLayout(new GridLayout(3, 3));
        super.add(new JLabel("Produktname: ", SwingConstants.RIGHT));
        super.add(this.produktname);
        super.add(this.produktnameMeldung);
        super.add(new JLabel("Preis (Euro.Cent): ", SwingConstants.RIGHT));
        super.add(this.preis);
        super.add(this.preisMeldung);
        super.add(new JLabel());
        super.add(this.uebernahme);
        super.add(this.validiert);
        this.uebernahme.addActionListener(this);

        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        super.pack();
        super.setVisible(true);

        this.produktname.setName("Produkt");
        this.produktnameMeldung.setName("Produktmeldung");
        this.preis.setName("Preis");
        this.preisMeldung.setName("Preismeldung");
        this.uebernahme.setName("Uebernahme");
        this.validiert.setName("Ergebnis");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        boolean erfolg = true;
        this.produktnameMeldung.setText("");
        this.preisMeldung.setText("");
        String ein = this.produktname.getText().trim();
        if (ein.equals("")) {
            this.produktnameMeldung.setText("kein leeres Feld");
            erfolg = false;
        }
        String wert = preis.getText().trim();

        long ergebnis = 0;
        boolean punkt = false; // Punkt schon im Text gefunden
        int nachpunkt = 0; // welche Stelle nach dem Komma
        for (int i = 0; i < wert.length(); i++) {
            if (nachpunkt >= 2) {
                this.preisMeldung.setText("nur zwei Ziffern nach Punkt");
                erfolg = false;
            } else if (Character.isDigit(wert.charAt(i))) {
                ergebnis = ergebnis * 10 + Character.getNumericValue(wert.charAt(i));
                if (punkt) {
                    nachpunkt++;
                }
            } else if (wert.charAt(i) == '.') {
                if (!punkt) {
                    punkt = true;
                } else {
                    this.preisMeldung.setText("nur ein Punkt erlaubt");
                    erfolg = false;
                }
            } else {
                this.preisMeldung.setText("nur Ziffern eingeben");
                erfolg = false;
            }
        }
        if (erfolg) {
            if (!punkt || nachpunkt == 0) {
                ergebnis *= 100;
            } else if (nachpunkt == 1) {
                ergebnis *= 10;
            }
            Produkt p = new Produkt(ein, ergebnis);
            this.verwaltung.produktHinzufuegen(p);
            System.out.println(p);
            this.validiert.setText(" Produkt \u00fcbernommen");
        } else {
            this.validiert.setText(" Eingabe korrigieren");
        }
    }

    // / get und set
    public Produktverwaltung getVerwaltung() {
        return this.verwaltung;
    }

    public void setVerwaltung(Produktverwaltung verwaltung) {
        this.verwaltung = verwaltung;
    }
}
