/*
 * Created on 03.01.2005
 *
 * $Id: Croupier.java,v 1.1 2005/06/24 13:56:05 boehm Exp $
 */
package casino;

import java.io.*;

/**
 * @author <a href="mailto:boehm@javatux.de">oliver</a>
 * @since 03.01.2005
 * @version $revision$
 */
public class Croupier {
    
    /** Croupier kann nur 1 Spieler bedienen - das reicht vorerst */
    private Player player = null;
    
    private Konto spielbank = new Konto("Spielbank", 5000);
    
    /** und natuerlich braucht er noch einen Roulette-Tisch */
    private Roulette roulette = new Roulette();
    
    public String welcome() {
        Reader istreamReader = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(istreamReader);
        System.out.print("Ihren Namen bitte: ");
        try {
            return reader.readLine();
        } catch (IOException unexpected) {
            unexpected.printStackTrace();
            return "Nobody";
        }        
    }
    
    public void login(String name) {
        Konto konto = new Konto(name, 5000);
        this.login(new Player(name, konto));
    }
    
    public void login(Player john) {
        this.player = john;
        System.out.println("Guten Tag, " + john
                + " - Ihr Kontostand betraegt "
                + john.getKontostand() + " Chips");
    }
    
    /**
     * kleines Probespiel gefaellig?
     */
    public void playTheGame() {
        for (int i = 0; i < 800; i++) {
            playOneGame();
        }
        System.out.print("Kontostand " + player +": " + player.getKontostand());
        System.out.println(" / Spielbank: " + spielbank.abfragen());
    }
    
    /**
     * Eine Runde gefaellig?
     */
    public void playOneGame() {
        Einsatz einsatz = player.getEinsatz();
        spielbank.einzahlen(einsatz.getBetrag());
        System.out.print("Rien ne va plus...");
        roulette.werfeKugel();
        System.out.println(" " + roulette);
        Einsatz gewinn = getGewinn(einsatz);
        player.setGewinn(gewinn);
        spielbank.abheben(gewinn.getBetrag());
    }

    /**
     * Gewinn-Ermittlung mit Hilfe des Biet-Einsatzes.
     * @param einsatz
     * @return
     */
    private Einsatz getGewinn(Einsatz einsatz) {
        Einsatz abgerechnet = new Einsatz();
        if (roulette.isPair()) {
            abgerechnet.setPair(einsatz.getPair() * 2);
        }
        if (roulette.isImpair()) {
            abgerechnet.setImpair(einsatz.getImpair() * 2);
        }
        if (roulette.isManque()) {
            abgerechnet.setManque(einsatz.getManque() * 2);
        }
        if (roulette.isPasse()) {
            abgerechnet.setPasse(einsatz.getPasse() * 2);
        }
        int wurf = roulette.getWurf();
        int chips = einsatz.getZahl(wurf) * 36;
        abgerechnet.setZahl(wurf, chips);
        return abgerechnet;
    }

    public static void main(String[] args) {
        System.out.println ("Casino 'AOP' online - please enter :-)");
        Croupier croupier = new Croupier();
        //String name = croupier.welcome();
        croupier.login("John Player");
        croupier.playTheGame();
    }

}
