package de.dis2013.editor;

import de.dis2013.core.ImmoService;
import de.dis2013.data.Makler;
import de.dis2013.menu.MaklerSelectionMenu;
import de.dis2013.menu.Menu;
import de.dis2013.util.FormUtil;

/**
 * Klasse für die Menüs zur Verwaltung von Immobilien
 */
public class MaklerEditor {
	///Immobilienservice, der genutzt werden soll
	private ImmoService service;
	
	public MaklerEditor(ImmoService service) {
		this.service = service;
	}
	
	/**
	 * Zeigt die Maklerverwaltung
	 */
	public void showMaklerMenu() {
		//Menüoptionen
		final int NEW_MAKLER = 0;
		final int EDIT_MAKLER = 1;
		final int DELETE_MAKLER = 2;
		final int BACK = 3;
		
		//Maklerverwaltungsmenü
		Menu maklerMenu = new Menu("Makler-Verwaltung");
		maklerMenu.addEntry("Neuer Makler", NEW_MAKLER);
		maklerMenu.addEntry("Makler bearbeiten", EDIT_MAKLER);
		maklerMenu.addEntry("Makler löschen", DELETE_MAKLER);
		maklerMenu.addEntry("Zurück zum Hauptmenü", BACK);
		
		//Verarbeite Eingabe
		while(true) {
			int response = maklerMenu.show();
			
			switch(response) {
				case NEW_MAKLER:
					newMakler();
					break;
				case EDIT_MAKLER:
					editMakler();
					break;
				case DELETE_MAKLER:
					deleteMakler();
					break;
				case BACK:
					return;
			}
		}
	}
	
	/**
	 * Legt einen neuen Makler an, nachdem der Benutzer
	 * die entprechenden Daten eingegeben hat.
	 */
	private void newMakler() {
		Makler m = new Makler();
		
		m.setName(FormUtil.readString("Name"));
		m.setAdresse(FormUtil.readString("Adresse"));
		m.setLogin(FormUtil.readString("Login"));
		m.setPasswort(FormUtil.readString("Passwort"));
		service.addMakler(m);
		
		System.out.println("Makler mit der ID "+m.getId()+" wurde erzeugt.");
	}
	
	/**
	 * Berarbeitet einen Makler, nachdem der Benutzer ihn ausgewählt hat
	 */
	private void editMakler() {
		//Menü zum selektieren des Maklers
		Menu maklerSelectionMenu = new MaklerSelectionMenu("Makler editieren", service.getAllMakler());
		int id = maklerSelectionMenu.show();
		
		//Falls nicht "zurück" gewählt, Makler bearbeiten
		if(id != MaklerSelectionMenu.BACK) {
			//Makler laden
			Makler m = service.getMaklerById(id);
			System.out.println("Makler "+m.getName()+" wird bearbeitet. Leere Felder bleiben unverändert.");
			
			//Neue Daten abfragen
			String new_name = FormUtil.readString("Name", m.getName());
			String new_address = FormUtil.readString("Adresse", m.getAdresse());
			String new_login = FormUtil.readString("Login", m.getLogin());
			String new_password = FormUtil.readString("Passwort", m.getPasswort());
			
			//Neue Daten setzen
			m.setName(new_name);
			m.setAdresse(new_address);
			m.setLogin(new_login);
			m.setPasswort(new_password);
			
			service.editEstateAgent(m);
		}
	}
	
	/**
	 * Löscht einen Makler, nachdem der Benutzer
	 * ihn ausgewählt hat.
	 */
	private void deleteMakler() {
		//Menü zum selektieren des Maklers
		Menu maklerSelectionMenu = new MaklerSelectionMenu("Makler löschen", service.getAllMakler());
		int id = maklerSelectionMenu.show();
		
		//Makler löschen falls nicht "zurück" ausgewählt wurde
		if(id != MaklerSelectionMenu.BACK) {
			Makler m = service.getMaklerById(id);
			service.deleteMakler(m);
		}
	}
}
