/**
 *
 * Programmieraufgabe P-8 (DarlehenApplet.java)
 *
 * @author Leonhard Fellermayr
 * @version 1.1
 */

/** Benoetigte Packages */

import java.applet.Applet;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JOptionPane;
import java.text.NumberFormat;

/** Implementierung des Darlehen-Applets */

public class DarlehenApplet extends Applet {

	/** Breite und Hšhe des Applet-Fensters, wie auch im HTML-Tag definiert! */

	private final int WINDOW_HPADDING = 20;		/* Padding horizontal (Abstand zum Fensterrand) */
	private final int WINDOW_VPADDING = 20;		/* Padding vertikal (Abstand zum Fensterrand) */
	private final int BAR_HPADDING = 7;		/* Padding zwischen den Balken */
	private final int X_BESCHR = 5;			/* x-Achsen-Legende alle 5 Jahre */
	private final int INFO_RIGHTSPACE = 300;	/* Abstand der Informationen vom rechten Rand */

	/** Variablen zur Speicherung der Eingabegroessen */
	private double B, J, T;

	private Graphics2D g2;

	private Darlehen myDarlehen;

	private NumberFormat formatter;

	/** paint ()
	  *
	  * @param g Graphics
	  *
	  **/

	public void paint (Graphics g) {

		/** Erzeuge Instanz von Graphics2D */

		g2 = (Graphics2D) g;

		/** Nun ein Darlehen mit diesen Daten aufnehmen */

		myDarlehen = new Darlehen (B, J, T);

		/** Die von myDarlehen.getLaufzeit () gelieferte Laufzeit von Monaten in Jahre umrechnen */

		int laufzeit = (int)(Math.ceil (myDarlehen.getLaufzeit() / 12.0));

		/** Breite eines einzelnen Balkens */

		int width = (getWidth() - 2 * WINDOW_HPADDING) / laufzeit - BAR_HPADDING;

		/** Skalierungsfaktor fŸr die Balkenhoehe aus Kreditbetrag und zur VerfŸgung stehendem Platz errechnen */

		int skalierungsFaktor = (int)this.B / (getHeight() - 2 * WINDOW_VPADDING);

		/** for-Schleife: Iteriere Ÿber die Kreditlaufzeit */

		for (int i = 0; i <= laufzeit; i++) {

			/** Berechne X-Koordinate, an der der aktuelle Balken starten soll */

			int startX = WINDOW_HPADDING + i * (width + BAR_HPADDING);

			/** Berechne Y-Ausmasse des Balkens und skaliere linear */

			int startY = getHeight() - WINDOW_VPADDING - (int)myDarlehen.getRestschuld () / skalierungsFaktor;
			int height = getHeight() - WINDOW_VPADDING - startY;

			/** Balken zeichnen, anschlie§end fuellen */

			Rectangle2D myRect = new Rectangle2D.Double (startX, startY, width, height);
			g2.draw (myRect);
			g2.fill (myRect);

			/** X-Achsen-Beschriftung alle 5 Jahre */

			if ((i % X_BESCHR == 0) || (i == laufzeit))
				g2.drawString ("" + i, startX, getHeight());

			/** Tilge 12 Monate lang das Darlehen */

			myDarlehen.tilgeJahr ();


		} // for

		/** Einige wissenswerte Informationen zum dargestellten Kredit in der rechten oberen Ecke */

		g2.drawString ("Darlehensbetrag B = " + formatter.format (B) + " EUR", getWidth() - INFO_RIGHTSPACE, WINDOW_VPADDING);
		g2.drawString ("Zinssatz J = " + J + "%",        getWidth() - INFO_RIGHTSPACE, WINDOW_VPADDING + 20);
		g2.drawString ("Tilgungsrate T = " + T + "%",    getWidth() - INFO_RIGHTSPACE, WINDOW_VPADDING + 40);
		g2.drawString ("Laufzeit = " + myDarlehen.getLaufzeit () / 12 + " Jahre, " + myDarlehen.getLaufzeit () % 12 + " Monate", getWidth() - INFO_RIGHTSPACE, WINDOW_VPADDING + 60);

	} // paint ()


	/** DarlehenApplet ()
	  *
	  * Konstruktor der Klasse DarlehenApplet
	  *
	  **/

	public DarlehenApplet () {

		formatter = NumberFormat.getNumberInstance();

		/** Nachkommastellen auf 2 festlegen */

		formatter.setMaximumFractionDigits (2);
		formatter.setMinimumFractionDigits (2);

		/** Eingabegrš§en via Dialogbox abfragen */

		String input;

		input = JOptionPane.showInputDialog ("Darlehenshšhe in EUR :");
		B = Double.parseDouble (input);

		input = JOptionPane.showInputDialog ("Effektiver Jahreszins in % :");
		J = Double.parseDouble (input);

		input = JOptionPane.showInputDialog ("Vereinbarte monatliche Tilgungsrate in % :");
		T = Double.parseDouble (input);

	} // constructor DarlehenApplet ()

} // class DarlehenApplet ()
