package javacodebook.gui.state;

import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.io.*;

/**
 * @author Benjamin Rusch
 * 
 * Das PropertyFrame speichert vom Benutzer gesetzte Einstellungen über eine 
 * Property. Diese wird in einem File 'gui.properties' beim Programmende 
 * gespeichert, und beim erneuten Programmstart wieder geladen.
 * 
 */
public class PropertyFrame extends Frame{

	// Default Status der Application
	public static final String DEFAULT_MILK = "no";
	public static final String DEFAULT_SUGAR = "no";
	public static final String DEFAULT_SIZE = "normal";
	
	// Keys für die Persistenten Daten
	public static final String MILK_KEY = "milk";
	public static final String SUGAR_KEY = "sugar";
	public static final String SIZE_KEY = "size";
	
	// Konstanten für Checkbox Status
	public static final String CHECKBOX_MARKED = "yes";
	public static final String CHECKBOX_UNMARKED = "no";
	
	// Komponenten des Frames
	private Checkbox milk = null;
    private Checkbox sugar = null;
    private Choice sizeChooser = new Choice();
    
    // Properties-Objekt 
    private Properties properties = new Properties();
	
	/**
	 * Konstruktor von PropertyFrame
	 */
	public PropertyFrame(String title) {

		super(title);
		
		setLayout(new FlowLayout());
	
		// Beim Klicken des Schließen-Buttons vom Haupt-Fenster
		// wird der shutdown()-Methode aufgerufen.
		this.addWindowListener(new WindowAdapter() {
		    public void windowClosing(WindowEvent we) {
				shutdown();}
		});
		
		// Komponenten werden gebaut und auf das Frame gelegt 
		milk = new Checkbox("Milch");
		sugar = new Checkbox("Zucker");
		sizeChooser.add("klein");
		sizeChooser.add("normal");
		sizeChooser.add("groß");	
		add(milk);
		add(sugar);	
		add(sizeChooser);
		
		// Alte bzw. Default Einstellungen werden gesetzt
		startup();
	}
	
	/**
	 * Falls vorhanden werden die Properties geladen, und alte Einstellungen 
	 * wieder hergestellt.
	 */
	private void startup() {	
		try {
    		// Property wird geladen
			properties.load(new FileInputStream("gui.properties"));
		}
       	catch (IOException e) {	
    		System.out.println("gui.properties existiert noch nicht");
    	}
   		// Status der milk-property wird gelesen, und checkbox 
		// dem entsprechend gesetzt
   		if(properties.getProperty(MILK_KEY,DEFAULT_MILK).equals(CHECKBOX_MARKED))
   			milk.setState(true);
   		else	
   			milk.setState(false);
   			
   		// Status der sugar-property wird gelesen und checkbox 
   		// dementsprechend gesetzt
   		if(properties.getProperty(SUGAR_KEY,DEFAULT_SUGAR).equals(CHECKBOX_MARKED))
   			sugar.setState(true);
   		else	
   			sugar.setState(false);
   		
   		// Choice Auswahl wird gelesen und gesetzt	
   		sizeChooser.select(properties.getProperty(SIZE_KEY,DEFAULT_SIZE));   		
	}
	
	private void shutdown() {
		try {
			// Status der milk-checkbox wird in Properties geschrieben
			if(milk.getState())
				properties.setProperty(MILK_KEY,CHECKBOX_MARKED);
			else
				properties.setProperty(MILK_KEY,CHECKBOX_UNMARKED);
			
			// Status der sugar-checkbox wird in Properties geschrieben
			if(sugar.getState())
				properties.setProperty(SUGAR_KEY,CHECKBOX_MARKED);
			else
				properties.setProperty(SUGAR_KEY,CHECKBOX_UNMARKED);
			
			// Status der choice wird in Properties geschrieben
			properties.setProperty(SIZE_KEY,sizeChooser.getSelectedItem());
			
			// Properties wird in einem File gespeichert
        	properties.store(new FileOutputStream("gui.properties"), null);
    	} 
    	catch (IOException e) {}
		
		System.exit(0);
	}
		    



}
