package jrummikub.view;

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

import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings.Type;
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, Type> changePlayerTypeEvent = new MockEvent2<Integer, Type>();
	/**	*/
	public MockEvent startGameEvent = new MockEvent();
	/**	*/
	public MockEvent offerGameEvent = new MockEvent();
	/**	*/
	public MockEvent networkGameEvent = new MockEvent();
	/**	*/
	public SettingsError error = SettingsError.NO_ERROR;
	/**	*/
	public boolean startButtonEnabled = true;
	/**	*/
	public boolean addPlayerButtonEnabled = true;
	/**	*/
	public List<Boolean> removePlayerButtonsEnabled = Collections.emptyList();

	/**	*/
	public MockEvent setVariantDefaultEvent = new MockEvent();
	/**	*/
	public MockEvent setVariantChildrenEvent = new MockEvent();
	/**	*/
	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<Integer> changeTimeEvent = new MockEvent1<Integer>();
	/** */
	public MockEvent1<Boolean> changeNoLimitsEvent = new MockEvent1<Boolean>();
	/** */
	public MockEvent1<Set<StoneColor>> changeStoneColorsEvent = new MockEvent1<Set<StoneColor>>();
	/**	*/
	public MockEvent1<Boolean> changeSeeHandSizeEvent = new MockEvent1<Boolean>();
	/** */
	public int initialMeldThreshold;
	/**	*/
	public int jokerNumber;
	/** */
	public int stoneSetNumber;
	/** */
	public int numberOfStonesDealt;
	/** */
	public int highestValue;
	/** */
	public int totalTime;
	/** */
	public boolean noLimits;
	/** */
	public boolean seeHandSize;
	/** */
	public Set<StoneColor> stoneColors;
	/** */
	public MockEvent backEvent = new MockEvent();
	/** */
	public SettingsMode settingsMode;

	@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(List<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();
		totalTime = gameSettings.getTotalTime();
		noLimits = gameSettings.isNoLimits();
		seeHandSize = gameSettings.getSeeHandSize();
		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;
	}

	@Override
	public IEvent1<Integer> getChangeTimeEvent() {
		return changeTimeEvent;
	}

	@Override
	public IEvent1<Boolean> getChangeNoLimitsEvent() {
		return changeNoLimitsEvent;
	}

	@Override
	public IEvent getSetVariantDefaultEvent() {
		return setVariantDefaultEvent;
	}

	@Override
	public IEvent getSetVariantChildrenEvent() {
		return setVariantChildrenEvent;
	}

	@Override
	public IEvent getBackEvent() {
		return backEvent;
	}

	@Override
	public void setPlayerTypeChoices(List<List<Type>> choices) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setPlayerNamesEditable(List<Boolean> editable) {
		// TODO Auto-generated method stub

	}

	@Override
	public IEvent getOfferGameEvent() {
		return offerGameEvent;
	}

	@Override
	public void setSettingsMode(SettingsMode mode) {
		settingsMode = mode;
	}

	@Override
	public void setPlayerColors(Set<Color> colors) {
		// TODO Auto-generated method stub

	}

	@Override
	public IEvent1<Boolean> getChangeSeeHandSizeEvent() {
		return changeSeeHandSizeEvent;
	}
}
