package jrummikub.view;

import java.awt.Color;
import java.util.HashSet;
import java.util.Set;

import jrummikub.control.turn.TurnControlFactory;
import jrummikub.control.turn.TurnControlFactory.Type;
import jrummikub.model.GameSettings;
import jrummikub.model.StoneColor;
import jrummikub.util.IEvent;
import jrummikub.util.IEvent1;
import jrummikub.util.IEvent2;
import jrummikub.util.MockEvent;
import jrummikub.util.MockEvent1;
import jrummikub.util.MockEvent2;

/**	*/
public class MockSettingsPanel implements ISettingsPanel {

	/**	*/
	public MockEvent addPlayerEvent = new MockEvent();
	/**	*/
	public MockEvent1<Integer> removePlayerEvent = new MockEvent1<Integer>();
	/**	*/
	public MockEvent2<Integer, Color> changePlayerColorEvent = new MockEvent2<Integer, Color>();
	/**	*/
	public MockEvent2<Integer, String> changePlayerNameEvent = new MockEvent2<Integer, String>();
	/** */
	public MockEvent2<Integer, TurnControlFactory.Type> changePlayerTypeEvent = new MockEvent2<Integer, TurnControlFactory.Type>();
	/**	*/
	public MockEvent startGameEvent = new MockEvent();
	/**	*/
	public SettingsError error = SettingsError.NO_ERROR;
	/**	*/
	public boolean startButtonEnabled = true;
	/**	*/
	public boolean addPlayerButtonEnabled = true;
	/**	*/
	public boolean removePlayerButtonsEnabled = false;

	/**	*/
	public MockEvent1<Integer> changeInitialMeldThresholdEvent = new MockEvent1<Integer>();
	/**	*/
	public MockEvent1<Integer> changeJokerNumberEvent = new MockEvent1<Integer>();
	/** */
	public MockEvent1<Integer> changeStoneSetNumberEvent = new MockEvent1<Integer>();
	/** */
	public MockEvent1<Integer> changeNumberOfStonesDealtEvent = new MockEvent1<Integer>();
	/** */
	public MockEvent1<Integer> changeHighestValueEvent = new MockEvent1<Integer>();
	/** */
	public MockEvent1<Set<StoneColor>> changeStoneColorsEvent = new MockEvent1<Set<StoneColor>>();
	/**	*/
	public int initialMeldThreshold;
	/**	*/
	public int jokerNumber;
	/** */
	public int stoneSetNumber;
	/** */
	public int numberOfStonesDealt;
	/** */
	public int highestValue;
	/** */
	public Set<StoneColor> stoneColors;

	@Override
	public IEvent getAddPlayerEvent() {
		return addPlayerEvent;
	}

	@Override
	public IEvent1<Integer> getRemovePlayerEvent() {
		return removePlayerEvent;
	}

	@Override
	public IEvent2<Integer, Color> getChangePlayerColorEvent() {
		return changePlayerColorEvent;
	}

	@Override
	public IEvent2<Integer, String> getChangePlayerNameEvent() {
		return changePlayerNameEvent;
	}

	@Override
	public IEvent1<Integer> getChangeInitialMeldThresholdEvent() {
		return changeInitialMeldThresholdEvent;
	}

	@Override
	public IEvent1<Integer> getChangeNumberOfStonesDealtEvent() {
		return changeNumberOfStonesDealtEvent;
	}

	@Override
	public IEvent1<Integer> getChangeHighestValueEvent() {
		return changeHighestValueEvent;
	}

	@Override
	public IEvent1<Set<StoneColor>> getChangeStoneColorsEvent() {
		return changeStoneColorsEvent;
	}

	@Override
	public IEvent getStartGameEvent() {
		return startGameEvent;
	}

	@Override
	public void setError(SettingsError error) {
		this.error = error;

	}

	@Override
	public void enableStartGameButton(boolean enable) {
		startButtonEnabled = enable;

	}

	@Override
	public void enableAddPlayerButton(boolean enable) {
		addPlayerButtonEnabled = enable;

	}

	@Override
	public void enableRemovePlayerButtons(boolean enable) {
		removePlayerButtonsEnabled = enable;

	}

	@Override
	public void setGameSettings(GameSettings gameSettings) {
		initialMeldThreshold = gameSettings.getInitialMeldThreshold();
		jokerNumber = gameSettings.getJokerNumber();
		stoneSetNumber = gameSettings.getStoneSetNumber();
		numberOfStonesDealt = gameSettings.getNumberOfStonesDealt();
		highestValue = gameSettings.getHighestValue();
		stoneColors = new HashSet<StoneColor>(gameSettings.getStoneColors());
	}

	@Override
	public IEvent1<Integer> getChangeJokerNumberEvent() {
		return changeJokerNumberEvent;
	}

	@Override
	public IEvent2<Integer, Type> getChangePlayerTypeEvent() {
		return changePlayerTypeEvent;
	}

	@Override
	public IEvent1<Integer> getChangeStoneSetNumberEvent() {
		return changeStoneSetNumberEvent;
	}

}