import java.lang.Math;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.*;
import java.util.*;

class Haendler implements ActionListener {
	Border linie;
	Border rand3D;
	static String newline = "\n";
	
	static JTextArea chronik;
	JFrame fenster;
	static JScrollPane scrollPane;
	
	JLabel jahresAnzeige;
	static int jahr = 0;
	static int faktor = 0;
	
  static JTextField benoetigtesEssenAnzeige;
	static JTextField geldAnzeige;
	static long geld = 10000;
	
	static Ware arbeiter;
	static JTextField arbeiterAnzeige;
	static JTextField arbeiterPreisAnzeige;
	
	static Ware land;
	static JTextField landAnzeige;
	static JTextField landPreisAnzeige;	
	
	static Ware essen;
	static JTextField essenAnzeige;
	static JTextField essenPreisAnzeige;	

	static Ware salz;
	static JTextField salzAnzeige;
	static JTextField salzPreisAnzeige;	

	static Ware tuch;
	static JTextField tuchAnzeige;
	static JTextField tuchPreisAnzeige;	
	
	static Ware honig;
	static JTextField honigAnzeige;
	static JTextField honigPreisAnzeige;	

	static Ware flachs;
	static JTextField flachsAnzeige;
	static JTextField flachsPreisAnzeige;	
	
	static Ware felle;
	static JTextField felleAnzeige;
	static JTextField fellePreisAnzeige;	
	
	static Ware tran;
	static JTextField tranAnzeige;
	static JTextField tranPreisAnzeige;	
	
	static Ware gewuerze;
	static JTextField gewuerzeAnzeige;
	static JTextField gewuerzePreisAnzeige;	
	
	static Ware holz;
	static JTextField holzAnzeige;
	static JTextField holzPreisAnzeige;	
	
	static Ware eisen;
	static JTextField eisenAnzeige;
	static JTextField eisenPreisAnzeige;	
	
	static Ware kupfer;
	static JTextField kupferAnzeige;
	static JTextField kupferPreisAnzeige;	
	
	static Ware bier;
	static JTextField bierAnzeige;
	static JTextField bierPreisAnzeige;	
	
	static Ware wein;
	static JTextField weinAnzeige;
	static JTextField weinPreisAnzeige;	
	
	static int ingenieure;
	static JTextField ingenieureAnzeige;
	
	static Random zufall;
	
	HandelsDialog arbeiterHandel;
	HandelsDialog landHandel;
	HandelsDialog essenHandel;
	HandelsDialog salzHandel;
	HandelsDialog tuchHandel;
  HandelsDialog honigHandel;
	HandelsDialog flachsHandel;
	HandelsDialog felleHandel;
	HandelsDialog tranHandel;
	HandelsDialog gewuerzeHandel;
	HandelsDialog holzHandel;
	HandelsDialog kupferHandel;
	HandelsDialog eisenHandel;
	HandelsDialog bierHandel;
	HandelsDialog weinHandel;			
	
	public Haendler() {
    zufall = new Random();
    
    // Waren deklarieren und initialisieren		
    arbeiter = new Ware("Arbeiter","",20,100);
    land = new Ware("Land","Hektar",60,1000);
    essen = new Ware("Essen","Rationen",20,100);
    flachs = new Ware("Flachs","Ballen",30,0);
    salz = new Ware("Salz","Sack",30,0);
    tuch = new Ware("Tuch","Ballen",40,0);
    honig = new Ware("Honig","Fass",35,0);
	  felle = new Ware("Felle","Packen",55,0);
	  tran = new Ware("Tran","Fass",50,0);
	  gewuerze = new Ware("Gewürze","Kisten",100,0);
	  holz = new Ware("Holz","Ster",50,0);
	  kupfer = new Ware("Kupfer","Pfund",70,0);
	  eisen = new Ware("Eisen","Pfund",85,0);
	  bier = new Ware("Bier","Fass",42,0);
	  wein = new Ware("Wein","Fass",50,0);			
	    
    // Hauptfenster aufbauen
    baueFenster();
  
    // einzelne Dialogboxen definieren 
    arbeiterHandel = new HandelsDialog(fenster,"Arbeiter anwerben / entlassen",arbeiter,gibZufallsWert(10),geld); 
		arbeiterHandel.setVisible(false);
		arbeiterHandel.pack();	
		
    landHandel = new HandelsDialog(fenster,"Landhandel",land,gibZufallsWert(500),geld);
		landHandel.setVisible(false);
		landHandel.pack();			
		
    essenHandel = new HandelsDialog(fenster,"Lebensmittel",essen,gibZufallsWert(500),geld);   
    essenHandel.setVisible(false);
		essenHandel.pack();					
		
		salzHandel = new HandelsDialog(fenster,"Salzhandel",salz,gibZufallsWert(30),geld);
		salzHandel.setVisible(false);
		salzHandel.pack();					
		
		tuchHandel = new HandelsDialog(fenster,"Tuchhandel",tuch,gibZufallsWert(20),geld);
		tuchHandel.setVisible(false);
		tuchHandel.pack();
		
    honigHandel = new HandelsDialog(fenster,"Honighandel",honig,0,geld); 
		honigHandel.setVisible(false);
		honigHandel.pack();	
		
    flachsHandel = new HandelsDialog(fenster,"Flachshandel",flachs,0,geld);
		flachsHandel.setVisible(false);
		flachsHandel.pack();			
		
    felleHandel = new HandelsDialog(fenster,"Fellhandel",felle,0,geld);   
    felleHandel.setVisible(false);
		felleHandel.pack();					
		
		tranHandel = new HandelsDialog(fenster,"Tranhandel",tran,0,geld);
		tranHandel.setVisible(false);
		tranHandel.pack();					
		
		gewuerzeHandel = new HandelsDialog(fenster,"Gewürzhandel",gewuerze,0,geld);
		gewuerzeHandel.setVisible(false);
		gewuerzeHandel.pack();
		
		holzHandel = new HandelsDialog(fenster,"Holzhandel",holz,gibZufallsWert(50),geld);
		holzHandel.setVisible(false);
		holzHandel.pack();
		
		eisenHandel = new HandelsDialog(fenster,"Eisenhandel",eisen,0,geld);
		eisenHandel.setVisible(false);
		eisenHandel.pack();
		
		kupferHandel = new HandelsDialog(fenster,"Eisenhandel",kupfer,0,geld);
		kupferHandel.setVisible(false);
		kupferHandel.pack();
		
		bierHandel = new HandelsDialog(fenster,"Bierhandel",bier,0,geld);
		bierHandel.setVisible(false);
		bierHandel.pack();
		
		weinHandel = new HandelsDialog(fenster,"Weinhandel",wein,0,geld);
		weinHandel.setVisible(false);
		weinHandel.pack();
	}
	
	public JPanel lagerFeldPanel() {
		linie = BorderFactory.createLineBorder(Color.black);
		Border lagerBorder = BorderFactory.createTitledBorder(linie, "Waren im Lager");
		
		JPanel lagerFeld = new JPanel(new GridLayout(14,3));
		
		
		lagerFeld.add(new JLabel("  Waren"));
		lagerFeld.add(new JLabel("  Preis"));
		lagerFeld.add(new JLabel("  im Lager..."));

		JButton buttonEssen = new JButton("Essen");
		buttonEssen.addActionListener(this);
		lagerFeld.add(buttonEssen);
		essenPreisAnzeige = new JTextField(essen.gibPreisString());
		essenPreisAnzeige.setEditable(false);
    lagerFeld.add(essenPreisAnzeige);
    essenAnzeige = new JTextField(String.valueOf(essen.gibAnzahl()));
    essenAnzeige.setEditable(false);
    lagerFeld.add(essenAnzeige);

		JButton buttonSalz = new JButton("Salz");
		buttonSalz.addActionListener(this);
		lagerFeld.add(buttonSalz);
		salzPreisAnzeige = new JTextField(salz.gibPreisString());
		salzPreisAnzeige.setEditable(false);
		lagerFeld.add(salzPreisAnzeige);
		salzAnzeige = new JTextField(String.valueOf(salz.gibAnzahl()));
    salzAnzeige.setEditable(false);
    lagerFeld.add(salzAnzeige);

		JButton buttonTuch = new JButton("Tuch");
		buttonTuch.addActionListener(this);
		lagerFeld.add(buttonTuch);
		tuchPreisAnzeige = new JTextField(tuch.gibPreisString());
		tuchPreisAnzeige.setEditable(false);
		lagerFeld.add(tuchPreisAnzeige);
		tuchAnzeige = new JTextField(String.valueOf(tuch.gibAnzahl()));
    tuchAnzeige.setEditable(false);
    lagerFeld.add(tuchAnzeige);
				
		JButton buttonHonig = new JButton("Honig");
		buttonHonig.addActionListener(this);
		lagerFeld.add(buttonHonig);
		honigPreisAnzeige = new JTextField(honig.gibPreisString());
		honigPreisAnzeige.setEditable(false);
		lagerFeld.add(honigPreisAnzeige);
		honigAnzeige = new JTextField(String.valueOf(honig.gibAnzahl()));
    honigAnzeige.setEditable(false);
    lagerFeld.add(honigAnzeige);		
    
		JButton buttonFlachs = new JButton("Flachs");
		buttonFlachs.addActionListener(this);
		lagerFeld.add(buttonFlachs);
		flachsPreisAnzeige = new JTextField(flachs.gibPreisString());
		flachsPreisAnzeige.setEditable(false);
		lagerFeld.add(flachsPreisAnzeige);
		flachsAnzeige = new JTextField(String.valueOf(flachs.gibAnzahl()));
    flachsAnzeige.setEditable(false);
    lagerFeld.add(flachsAnzeige);
		
		JButton buttonFelle = new JButton("Felle");
		buttonFelle.addActionListener(this);
		lagerFeld.add(buttonFelle);
		fellePreisAnzeige = new JTextField(felle.gibPreisString());
		fellePreisAnzeige.setEditable(false);
		lagerFeld.add(fellePreisAnzeige);
		felleAnzeige = new JTextField(String.valueOf(felle.gibAnzahl()));
    felleAnzeige.setEditable(false);
    lagerFeld.add(felleAnzeige);
		
		JButton buttonTran = new JButton("Tran");
		buttonTran.addActionListener(this);
		lagerFeld.add(buttonTran);
		tranPreisAnzeige = new JTextField(tran.gibPreisString());
		tranPreisAnzeige.setEditable(false);
		lagerFeld.add(tranPreisAnzeige);
		tranAnzeige = new JTextField(String.valueOf(tran.gibAnzahl()));
    tranAnzeige.setEditable(false);
    lagerFeld.add(tranAnzeige);

		JButton buttonGewuerze = new JButton("Gewürze");
		buttonGewuerze.addActionListener(this);
		lagerFeld.add(buttonGewuerze);
		gewuerzePreisAnzeige = new JTextField(gewuerze.gibPreisString());
		gewuerzePreisAnzeige.setEditable(false);
		lagerFeld.add(gewuerzePreisAnzeige);
		gewuerzeAnzeige = new JTextField(String.valueOf(gewuerze.gibAnzahl()));
    gewuerzeAnzeige.setEditable(false);
    lagerFeld.add(gewuerzeAnzeige);
		
		JButton buttonHolz = new JButton("Holz");
		buttonHolz.addActionListener(this);
		lagerFeld.add(buttonHolz);
		holzPreisAnzeige = new JTextField(holz.gibPreisString());
		holzPreisAnzeige.setEditable(false);
		lagerFeld.add(holzPreisAnzeige);
		holzAnzeige = new JTextField(String.valueOf(holz.gibAnzahl()));
    holzAnzeige.setEditable(false);
    lagerFeld.add(holzAnzeige);

		JButton buttonEisen = new JButton("Eisen");
		buttonEisen.addActionListener(this);
		lagerFeld.add(buttonEisen);
		eisenPreisAnzeige = new JTextField(eisen.gibPreisString());
		eisenPreisAnzeige.setEditable(false);
		lagerFeld.add(eisenPreisAnzeige);
		eisenAnzeige = new JTextField(String.valueOf(eisen.gibAnzahl()));
    eisenAnzeige.setEditable(false);
    lagerFeld.add(eisenAnzeige);
		
		JButton buttonKupfer = new JButton("Kupfer");
		buttonKupfer.addActionListener(this);
		lagerFeld.add(buttonKupfer);
		kupferPreisAnzeige = new JTextField(kupfer.gibPreisString());
		kupferPreisAnzeige.setEditable(false);
		lagerFeld.add(kupferPreisAnzeige);
		kupferAnzeige = new JTextField(String.valueOf(kupfer.gibAnzahl()));
    kupferAnzeige.setEditable(false);
    lagerFeld.add(kupferAnzeige);
		
		JButton buttonBier = new JButton("Bier");
		buttonBier.addActionListener(this);
		lagerFeld.add(buttonBier);
		bierPreisAnzeige = new JTextField(bier.gibPreisString());
		bierPreisAnzeige.setEditable(false);
		lagerFeld.add(bierPreisAnzeige);
		bierAnzeige = new JTextField(String.valueOf(bier.gibAnzahl()));
    bierAnzeige.setEditable(false);
    lagerFeld.add(bierAnzeige);

		JButton buttonWein = new JButton("Wein");
		buttonWein.addActionListener(this);
		lagerFeld.add(buttonWein);
		weinPreisAnzeige = new JTextField(wein.gibPreisString());
		weinPreisAnzeige.setEditable(false);
		lagerFeld.add(weinPreisAnzeige);
		weinAnzeige = new JTextField(String.valueOf(wein.gibAnzahl()));
    weinAnzeige.setEditable(false);
    lagerFeld.add(weinAnzeige);

		lagerFeld.setBorder(lagerBorder);		
		
		return lagerFeld;
	}
	
	public JPanel statusFeldPanel() {
		linie = BorderFactory.createLineBorder(Color.black);
	  Border statusBorder = BorderFactory.createTitledBorder(linie, "Status");

		JPanel statusFeld = new JPanel(new GridLayout(6,1));
		
		ImageIcon gesicht = new ImageIcon("img/GesichtEdelmann.gif");
		
		statusFeld.add(new JLabel(" Sigmund Bluthand",gesicht,JLabel.CENTER));
		
		JPanel s = new JPanel(new FlowLayout());
		s.add(new JLabel(" Sie haben den sozialen Status: "));	
		JTextField sozialerStatusAnzeige = new JTextField("Händler");
		sozialerStatusAnzeige.setEditable(false);
		s.add(sozialerStatusAnzeige);
		statusFeld.add(s);
				
    JPanel l = new JPanel(new FlowLayout());
		l.add(new JLabel(" Sie verfügen über "));	
		landAnzeige = new JTextField(land.gibAnzahlString());
		landAnzeige.setEditable(false);
		l.add(landAnzeige);
		l.add(new JLabel(" ha Land."));
		statusFeld.add(l);
		
		JPanel l2 = new JPanel();
		JButton landButton = new JButton("Land");
		landButton.addActionListener(this);
		l2.add(landButton);
		l2.add(new JLabel("kostet heuer"));
		landPreisAnzeige = new JTextField(land.gibPreisString());
		landPreisAnzeige.setEditable(false);
		l2.add(landPreisAnzeige);
		l2.add(new JLabel("Gold"));
		statusFeld.add(l2);
				
		JPanel a2 = new JPanel(new FlowLayout());
		a2.add(new JLabel(" Ihre Arbeiter sind "));	
		JTextField stimmungAnzeige = new JTextField("glücklich");
		stimmungAnzeige.setEditable(false);
		a2.add(stimmungAnzeige);
		statusFeld.add(a2);
		
		JPanel g = new JPanel(new FlowLayout());
		g.add(new JLabel(" In ihrer Geldkasse befinden sich "));
    geldAnzeige = new JTextField(String.valueOf(geld));
		geldAnzeige.setEditable(false);
		g.add(geldAnzeige);		
		g.add(new JLabel(" Goldstücke"));
		statusFeld.add(g);
		
		statusFeld.setBorder(statusBorder);	  
		
		return statusFeld;
	}
	
	public JPanel arbeiterFeldPanel() {
		ImageIcon up = new ImageIcon("img/up.gif");
		ImageIcon down = new ImageIcon("img/down.gif");
		ImageIcon bauernIcon = new ImageIcon("img/bauer.gif");
		ImageIcon kriegerIcon = new ImageIcon("img/bogenschuetze.gif");
		ImageIcon kundschafterIcon = new ImageIcon("img/entdecker.gif");
		ImageIcon haendlerIcon = new ImageIcon("img/karawane.gif");
		ImageIcon ingenieurIcon = new ImageIcon("img/ingenieur.gif");

		linie = BorderFactory.createLineBorder(Color.black);
	  Border arbeiterBorder = BorderFactory.createTitledBorder(linie, "Arbeitskäfte");
	  
	  JPanel zeile1 = new JPanel(new FlowLayout());
		zeile1.add(new JLabel("Zur Zeit sind "));	
		arbeiterAnzeige = new JTextField(arbeiter.gibAnzahlString());
		arbeiterAnzeige.setEditable(false);
		zeile1.add(arbeiterAnzeige);
		zeile1.add(new JLabel(" Arbeiter bei Ihnen beschäftigt"));
			  
	  JPanel zeile2 = new JPanel();
	  zeile2.add(new JLabel("Ein weiterer"));
	  JButton arbeiterButton = new JButton("Arbeiter");
	  arbeiterButton.addActionListener(this);
	  zeile2.add(arbeiterButton);
	  zeile2.add(new JLabel("kostet"));
	  arbeiterPreisAnzeige = new JTextField(String.valueOf(arbeiter.gibPreis()));
	  arbeiterPreisAnzeige.setEditable(false);
	  zeile2.add(arbeiterPreisAnzeige);
	  zeile2.add(new JLabel("Gold"));
	  
	  JPanel zeile3 = new JPanel();
	  zeile3.add(new JLabel("Sie brauchen "));
	  benoetigtesEssenAnzeige = new JTextField(String.valueOf(arbeiter.gibAnzahl()));
	  benoetigtesEssenAnzeige.setEditable(false);
	  zeile3.add(benoetigtesEssenAnzeige);
	  zeile3.add(new JLabel("Rationen für alle Arbeiter"));
	  
	  JPanel ersteAngaben = new JPanel(new GridLayout(3,1));
	  ersteAngaben.add(zeile1);
	  ersteAngaben.add(zeile2);
	  ersteAngaben.add(zeile3);
	  
	  JPanel buttonsUp = new JPanel(new GridLayout(7,1));
	  JButton mehrBauern = new JButton(up);
	  mehrBauern.setActionCommand("mehrBauern");
	  mehrBauern.addActionListener(this);
	  buttonsUp.add(mehrBauern);
	  JButton mehrSalzhauer = new JButton(up);
	  mehrSalzhauer.setActionCommand("mehrSalzhauer");
	  mehrSalzhauer.addActionListener(this);
	  buttonsUp.add(mehrSalzhauer);
	  JButton mehrTuchweber = new JButton(up);
	  mehrTuchweber.setActionCommand("mehrTuchweber");
	  mehrTuchweber.addActionListener(this);
	  buttonsUp.add(mehrTuchweber);
	  JButton mehrHaendler = new JButton(up);
	  mehrHaendler.setActionCommand("mehrHaendler");
	  mehrHaendler.addActionListener(this);
	  buttonsUp.add(mehrHaendler);
	  JButton mehrKrieger = new JButton(up);
	  mehrKrieger.setActionCommand("mehrKrieger");
	  mehrKrieger.addActionListener(this);
	  buttonsUp.add(mehrKrieger);
	  JButton mehrKundschafter = new JButton(up);
	  mehrKundschafter.setActionCommand("mehrKundschafter");
	  mehrKundschafter.addActionListener(this);
	  buttonsUp.add(mehrKundschafter);
	  JButton mehrIngenieure = new JButton(up);
	  mehrIngenieure.setActionCommand("mehrIngs");
	  mehrIngenieure.addActionListener(this);
	  buttonsUp.add(mehrIngenieure);
	  
	  
		JPanel anzahlFeld = new JPanel(new GridLayout(7,2));
		
		anzahlFeld.add(new JLabel(" Bauern "));
		anzahlFeld.add(new JTextField("40"));
		
		anzahlFeld.add(new JLabel(" Salzhauer "));
		anzahlFeld.add(new JTextField("40"));
		
		anzahlFeld.add(new JLabel(" Tuchweber "));
		anzahlFeld.add(new JTextField("30"));
		
		anzahlFeld.add(new JLabel(" Händler "));
		anzahlFeld.add(new JTextField("0"));
		
		anzahlFeld.add(new JLabel(" Krieger "));
		anzahlFeld.add(new JTextField("0"));
		
		anzahlFeld.add(new JLabel(" Kundschafter "));
		anzahlFeld.add(new JTextField("0"));
		
		anzahlFeld.add(new JLabel(" Ingenieure "));
		ingenieureAnzeige = new JTextField(String.valueOf(ingenieure));
		anzahlFeld.add(ingenieureAnzeige);
		
		
    JPanel buttonsDown = new JPanel(new GridLayout(7,1));
	  buttonsDown.add(new JButton(down));
	  buttonsDown.add(new JButton(down));
	  buttonsDown.add(new JButton(down));
	  buttonsDown.add(new JButton(down));
	  buttonsDown.add(new JButton(down));
	  buttonsDown.add(new JButton(down));
	  buttonsDown.add(new JButton(down));
	  
	  JPanel kasten = new JPanel(new BorderLayout());
	  kasten.add("West",buttonsUp);		
	  kasten.add("Center",anzahlFeld);
	  kasten.add("East",buttonsDown);
	  
	  JPanel arbeiterFeld = new JPanel(new BorderLayout());
	  arbeiterFeld.setBorder(arbeiterBorder);
	  arbeiterFeld.add("North",ersteAngaben);		
    arbeiterFeld.add("South",kasten);

    return arbeiterFeld;
	}
	
	  
  public void baueFenster() {
		fenster = new JFrame("Händler");
		fenster.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		fenster.setLocation(50,50);
		fenster.setVisible(true);
		
		JPanel rahmen = new JPanel(new BorderLayout());
		JPanel contentPane = new JPanel(new BorderLayout());
		
		// rand3D = BorderFactory.createEtchedBorder();
	  linie = BorderFactory.createLineBorder(Color.black);
	  
		Border jahrBorder = BorderFactory.createTitledBorder(linie, "Datum");
		Border chronikBorder = BorderFactory.createTitledBorder(linie, "Chronik");
    
		// Anzeige der Jahre
		jahresAnzeige = new JLabel(" Es wird geschrieben das Jahr: "+String.valueOf(jahr));
		jahresAnzeige.setBorder(jahrBorder);
		rahmen.add("North",jahresAnzeige);
		
    // Statusanzeige
    rahmen.add("West",statusFeldPanel());
    
    // Verteilung der Arbeitskräfe
    rahmen.add("East",arbeiterFeldPanel());    		
		
    // Logbuch		
		JPanel textFeld = new JPanel();
		chronik = new JTextArea(10,35); 
		scrollPane = new JScrollPane(chronik);
		textFeld.add(scrollPane);
		textFeld.setBorder(chronikBorder);
		rahmen.add("South",textFeld);


    // Buttons		
		JPanel buttonFeld = new JPanel(new FlowLayout());
		JButton weiter = new JButton("Weiter");
		weiter.addActionListener(this);
		buttonFeld.add(weiter);
		JButton ende = new JButton("Ende");
		ende.addActionListener(this);
		buttonFeld.add(ende);
		
		contentPane.add("West",lagerFeldPanel());
		contentPane.add("Center",rahmen);
		contentPane.add("South",buttonFeld);

		
		fenster.getContentPane().add(contentPane);
		fenster.pack();  	
  }
  
  static void anChronikAnfuegen (String str) {
  	String jString = String.valueOf(jahr);
  	while (jString.length() < 4) jString = "0"+jString;
  	chronik.append(jString+": "+str+newline);
  }
  
/** gib Zufall liefert einen Prozentwert zwischen 0.4 und 1.6 zurück
 *
 */
  static long gibZufallsWert(long basisWert) {
  	return Math.round(basisWert*(1+zufall.nextGaussian()*0.1));
  }
		
	static void berechneJahresResultate() {
		// Berechnung der Preise
		arbeiter.setzePreis(gibZufallsWert(20));
		arbeiterPreisAnzeige.setText(arbeiter.gibPreisString());
    land.setzePreis(gibZufallsWert(100));
    landPreisAnzeige.setText(land.gibPreisString());
		essen.setzePreis(gibZufallsWert(25));
		essenPreisAnzeige.setText(essen.gibPreisString());
		salz.setzePreis(gibZufallsWert(30));
		salzPreisAnzeige.setText(salz.gibPreisString());
		tuch.setzePreis(gibZufallsWert(40));
		tuchPreisAnzeige.setText(tuch.gibPreisString());
		flachs.setzePreis(gibZufallsWert(30));
		flachsPreisAnzeige.setText(flachs.gibPreisString());
		honig.setzePreis(gibZufallsWert(35));
		honigPreisAnzeige.setText(honig.gibPreisString());
		felle.setzePreis(gibZufallsWert(55));
		fellePreisAnzeige.setText(felle.gibPreisString());
		tran.setzePreis(gibZufallsWert(50));
		tranPreisAnzeige.setText(tran.gibPreisString());
		gewuerze.setzePreis(gibZufallsWert(100));
		gewuerzePreisAnzeige.setText(gewuerze.gibPreisString());
		holz.setzePreis(gibZufallsWert(50));
		holzPreisAnzeige.setText(holz.gibPreisString());
		eisen.setzePreis(gibZufallsWert(85));
		eisenPreisAnzeige.setText(eisen.gibPreisString());
		kupfer.setzePreis(gibZufallsWert(75));
		kupferPreisAnzeige.setText(kupfer.gibPreisString());
		bier.setzePreis(gibZufallsWert(42));
		bierPreisAnzeige.setText(bier.gibPreisString());
		wein.setzePreis(gibZufallsWert(50));
		weinPreisAnzeige.setText(wein.gibPreisString());
		
		// Berechnung der Kapitalveränderung
		if (geld >= 0) geld = geld + Math.round(geld * 0.013); 
		else geld = geld + Math.round(geld*0.0125);
		geld = geld - Math.round(arbeiter.gibPreis()*arbeiter.gibAnzahl()*0.5);
		anChronikAnfuegen("Die Arbeiter verlangten heuer "+String.valueOf(Math.round(arbeiter.gibPreis()*arbeiter.gibAnzahl()*0.5))+" Gold Lohn.");		
		
		// Berechnung der Arbeiteranzahl
		long alt = arbeiter.gibAnzahl();
		float essenfaktor =  ((float)essen.gibAnzahl()/(float)alt);
		essen.setzeAnzahl(essen.gibAnzahl() - arbeiter.gibAnzahl());
		if (essen.gibAnzahl() < 0) essen.setzeAnzahl(0);
		if ((essenfaktor > .5)&(essenfaktor < .8)) 
		  arbeiter.setzeAnzahl(Math.round(arbeiter.gibAnzahl()*essenfaktor));
		if (essenfaktor < .5) 
		  arbeiter.setzeAnzahl(Math.round(arbeiter.gibAnzahl() * 0.5));
		if ((essenfaktor >= 0.8)& (essenfaktor <= 1)) anChronikAnfuegen("Heuer verliessen keine Arbeiter ihr Land");
    if ((essenfaktor > 1)&(essenfaktor <= 1.3)) anChronikAnfuegen("Glückliche Arbeiter produzierten gut");
		if (essenfaktor > 1.3) anChronikAnfuegen("Überglückliche Arbeiter liessen Sie hochjubeln");
		if ((arbeiter.gibAnzahl()-alt) < 0) anChronikAnfuegen("Heuer verliessen "+(arbeiter.gibAnzahl()-alt)+" Arbeiter ihr Land ");
    benoetigtesEssenAnzeige.setText(String.valueOf(arbeiter.gibAnzahl()));		
    
		// Berechnung der Arbeitsaufteilung
		long anzArbeiter = arbeiter.gibAnzahl();
		float bauernfaktor;
		long salzArbeiter = 0;
		long tuchWeber = 0;
    long bauern = 0;
    
    if (anzArbeiter > 20) { 
      bauern = Math.round(anzArbeiter*0.4);
		  if ((bauern*20) > land.gibAnzahl()) bauern = Math.round(land.gibAnzahl()*0.05);
		  anzArbeiter = anzArbeiter - bauern;
		  if ((anzArbeiter % 2) ==0) {
  			tuchWeber = anzArbeiter / 2;
			  salzArbeiter = anzArbeiter / 2;
		  }
		  else {
			  anzArbeiter = anzArbeiter - 1;
			  tuchWeber = anzArbeiter / 2;
			  salzArbeiter = (anzArbeiter / 2)+1;
		  }
		}
		else bauern = anzArbeiter;    
		System.out.println("Bauern: "+bauern+" Salzarbeiter: "+salzArbeiter+" Tuchweber: "+tuchWeber);    
		System.out.println("----------------------------------------------------------");
    
		// mit 50 Bauern bei 1000 ha Land lassen sich ausreichend 100 Arbeiter versorgen
		long ernteBasis;
		if ((bauern*20)>land.gibAnzahl()) ernteBasis = land.gibAnzahl()/10;
		else ernteBasis = bauern*2;
		long ertrag = gibZufallsWert(ernteBasis);
    if (ertrag < 0) ertrag = 0;
    anChronikAnfuegen("Die Bauern fuhren eine Ernte von "+String.valueOf(ertrag)+" Rationen Essen ein.");
    essen.setzeAnzahl(ertrag + essen.gibAnzahl());		
		
		// Berechnung der Arbeitserträge 
		ertrag = gibZufallsWert(Math.round(salzArbeiter*1.4));
		if (ertrag < 0) ertrag = 0;
		salz.setzeAnzahl(ertrag+salz.gibAnzahl());
		anChronikAnfuegen("Es wurden "+String.valueOf(ertrag)+" Sack Salz erwirtschaftet.");
		
		ertrag = gibZufallsWert(Math.round(tuchWeber*0.75));
		if (ertrag < 0) ertrag = 0;
		tuch.setzeAnzahl(ertrag+tuch.gibAnzahl());
		anChronikAnfuegen(String.valueOf(ertrag)+" Ballen Tuch wurden heuer erstellt.");
		
    // AnzahlAnzeigen frisch setzen
    arbeiterAnzeige.setText(arbeiter.gibAnzahlString());
    essenAnzeige.setText(essen.gibAnzahlString());
    salzAnzeige.setText(salz.gibAnzahlString());
    tuchAnzeige.setText(tuch.gibAnzahlString());
    landAnzeige.setText(land.gibAnzahlString());
    geldAnzeige.setText(String.valueOf(geld));
    
    anChronikAnfuegen("-------------------------------------------------------------------------------------");
    
  }
	
	public static void main (String[] args) {
    Haendler spiel = new Haendler();
	}
	
	public void actionPerformed (ActionEvent e) {
		long result;
		
		if (e.getActionCommand()== "Weiter") {
			jahr++;
			String jString = String.valueOf(jahr);
			while (jString.length() < 6) jString = " "+jString+" ";
			if ((jahr % 5) == 0) faktor++;
			anChronikAnfuegen("-------------------------------------------------------------------------------------");
			anChronikAnfuegen("######################"+jString+"#######################");
			anChronikAnfuegen("-------------------------------------------------------------------------------------");			
		  jahresAnzeige.setText(" Es wird geschrieben das Jahr: "+String.valueOf(jahr));
			berechneJahresResultate();
		}
		
		if (e.getActionCommand()=="Ende") System.exit(0);
		if (e.getActionCommand()== "Arbeiter") {
		  arbeiterHandel.zeigeDialog(arbeiter,gibZufallsWert(10),geld);
		  result = arbeiterHandel.getInput();
		  if (result != 0) {
		  	arbeiter.setzeAnzahl(arbeiter.gibAnzahl()+result);
		  	arbeiterAnzeige.setText(arbeiter.gibAnzahlString());
		    if (result > 0) {
		    	geld = geld - (arbeiter.gibPreis()*result);
		      geldAnzeige.setText(String.valueOf(geld)); 
		    }
		    benoetigtesEssenAnzeige.setText(String.valueOf(arbeiter.gibAnzahl()));
		    if (result > 0) anChronikAnfuegen(String.valueOf(result)+" Arbeiter wurden für "+(arbeiter.gibPreis()*result)+" Gold angeworben");
		    else anChronikAnfuegen(String.valueOf(Math.abs(result))+" Arbeiter wurden entlassen ");		  
		  }
		}
		if (e.getActionCommand()== "Land") {
		  landHandel.zeigeDialog(land,gibZufallsWert(500),geld);
		  
		  result = landHandel.getInput();
		  if (result != 0) {
		  	land.setzeAnzahl(land.gibAnzahl()+result);
		  	landAnzeige.setText(land.gibAnzahlString());
		    geld = geld - (land.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" ha Land für "+(land.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" ha Land für "+Math.abs(land.gibPreis()*result)+" Gold");		  
		  }
		}			
		if (e.getActionCommand()== "Essen") {
		  essenHandel.zeigeDialog(essen,gibZufallsWert(500),geld);
		  result = essenHandel.getInput();
		  if (result != 0) {
		  	essen.setzeAnzahl(essen.gibAnzahl()+result);
		  	essenAnzeige.setText(essen.gibAnzahlString());
		    geld = geld - (essen.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Rationen Essen für "+(essen.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Rationen Essen für "+Math.abs(essen.gibPreis()*result)+" Gold");		  
		  }			
		}
		 
		if (e.getActionCommand()== "Salz") {
		  salzHandel.zeigeDialog(salz,gibZufallsWert(30),geld);
		  result = salzHandel.getInput();
		  if (result != 0) {
		  	salz.setzeAnzahl(salz.gibAnzahl()+result);
		  	salzAnzeige.setText(salz.gibAnzahlString());
		    geld = geld - (salz.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Sack Salz für "+(salz.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Sack Salz für "+Math.abs(salz.gibPreis()*result)+" Gold");		  
		  }			
		}

		if (e.getActionCommand()== "Tuch") {
		  tuchHandel.zeigeDialog(tuch,gibZufallsWert(20),geld);
		  
		  result = tuchHandel.getInput();
		  if (result != 0) {
		  	tuch.setzeAnzahl(tuch.gibAnzahl()+result);
		  	tuchAnzeige.setText(tuch.gibAnzahlString());
		    geld = geld - (tuch.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Tuch für "+(tuch.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Tuch für "+Math.abs(tuch.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Honig") {
		  honigHandel.zeigeDialog(honig,0,geld);
		  
		  result = honigHandel.getInput();
		  if (result != 0) {
		  	honig.setzeAnzahl(honig.gibAnzahl()+result);
		  	honigAnzeige.setText(honig.gibAnzahlString());
		    geld = geld - (honig.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Honig für "+(honig.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Honig für "+Math.abs(honig.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Flachs") {
		  flachsHandel.zeigeDialog(flachs,0,geld);
		  
		  result = flachsHandel.getInput();
		  if (result != 0) {
		  	flachs.setzeAnzahl(flachs.gibAnzahl()+result);
		  	flachsAnzeige.setText(flachs.gibAnzahlString());
		    geld = geld - (flachs.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Flachs für "+(flachs.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Flachs für "+Math.abs(flachs.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Felle") {
		  felleHandel.zeigeDialog(felle,0,geld);
		  
		  result = felleHandel.getInput();
		  if (result != 0) {
		  	felle.setzeAnzahl(felle.gibAnzahl()+result);
		  	felleAnzeige.setText(felle.gibAnzahlString());
		    geld = geld - (felle.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Felle für "+(felle.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Felle für "+Math.abs(felle.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Tran") {
		  tranHandel.zeigeDialog(tran,0,geld);
		  
		  result = tranHandel.getInput();
		  if (result != 0) {
		  	tran.setzeAnzahl(tran.gibAnzahl()+result);
		  	tranAnzeige.setText(tran.gibAnzahlString());
		    geld = geld - (tran.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Tran für "+(tran.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Tran für "+Math.abs(tran.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Gewürze") {
		  gewuerzeHandel.zeigeDialog(gewuerze,0,geld);
		  
		  result = gewuerzeHandel.getInput();
		  if (result != 0) {
		  	gewuerze.setzeAnzahl(gewuerze.gibAnzahl()+result);
		  	gewuerzeAnzeige.setText(gewuerze.gibAnzahlString());
		    geld = geld - (gewuerze.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Gewürze für "+(gewuerze.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Gewürze für "+Math.abs(gewuerze.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Holz") {
		  holzHandel.zeigeDialog(holz,0,geld);
		  
		  result = holzHandel.getInput();
		  if (result != 0) {
		  	holz.setzeAnzahl(holz.gibAnzahl()+result);
		  	holzAnzeige.setText(holz.gibAnzahlString());
		    geld = geld - (holz.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Holz für "+(holz.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Holz für "+Math.abs(holz.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Kupfer") {
		  kupferHandel.zeigeDialog(kupfer,0,geld);
		  
		  result = kupferHandel.getInput();
		  if (result != 0) {
		  	kupfer.setzeAnzahl(kupfer.gibAnzahl()+result);
		  	kupferAnzeige.setText(kupfer.gibAnzahlString());
		    geld = geld - (kupfer.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Kupfer für "+(kupfer.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Kupfer für "+Math.abs(kupfer.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Eisen") {
		  eisenHandel.zeigeDialog(eisen,0,geld);
		  
		  result = eisenHandel.getInput();
		  if (result != 0) {
		  	eisen.setzeAnzahl(eisen.gibAnzahl()+result);
		  	eisenAnzeige.setText(eisen.gibAnzahlString());
		    geld = geld - (eisen.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Eisen für "+(eisen.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Eisen für "+Math.abs(eisen.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Bier") {
		  bierHandel.zeigeDialog(bier,0,geld);
		  
		  result = bierHandel.getInput();
		  if (result != 0) {
		  	bier.setzeAnzahl(bier.gibAnzahl()+result);
		  	bierAnzeige.setText(bier.gibAnzahlString());
		    geld = geld - (bier.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Bier für "+(bier.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Bier für "+Math.abs(bier.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand()== "Wein") {
		  weinHandel.zeigeDialog(wein,0,geld);
		  
		  result = weinHandel.getInput();
		  if (result != 0) {
		  	wein.setzeAnzahl(wein.gibAnzahl()+result);
		  	weinAnzeige.setText(wein.gibAnzahlString());
		    geld = geld - (wein.gibPreis()*result);
		    geldAnzeige.setText(String.valueOf(geld)); 
		    if (result > 0) anChronikAnfuegen("Kauf von "+result+" Ballen Wein für "+(wein.gibPreis()*result)+" Gold");
		    else anChronikAnfuegen("Verkauf von "+Math.abs(result)+" Ballen Wein für "+Math.abs(wein.gibPreis()*result)+" Gold");		  
		  }
		}
		if (e.getActionCommand() == "mehrIngs") {
			ingenieure++;
			System.out.println("Wir wollen mehr Ingenieure!");
			ingenieureAnzeige.setText(String.valueOf(ingenieure));
		}
	}
}
