package jrummikub.control.network;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.awt.Color;

import jrummikub.control.SaveControl;
import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings;
import jrummikub.util.IListener;
import jrummikub.view.IView.BottomPanelType;
import jrummikub.view.MockView;

import org.junit.Before;
import org.junit.Test;

/**
 * Tests for the network game control
 */
public class NetworkGameControlTest {

	public NetworkGameControl hostControl, clientControl;
	public GameSettings settings;
	public MockView view;
	public MockConnectionControl connection;
	public boolean fired;

	/** */
	@Before
	public void setUp() {
		settings = new GameSettings();
		settings.getPlayerList().add(new PlayerSettings("Foobar", Color.BLACK));
		PlayerSettings player = new PlayerSettings("Fooblubb", Color.BLACK);
		player.setType(PlayerSettings.Type.NETWORK);
		settings.getPlayerList().add(player);
		view = new MockView();
		connection = new MockConnectionControl();
		hostControl = new NetworkGameControl(settings, new SaveControl(view),
				view, connection, true);
		clientControl = new NetworkGameControl(settings, new SaveControl(view),
				view, connection, false);
		fired = false;
	}

	/** */
	@Test
	public void testStart() {
		clientControl.startGame();
		assertFalse(connection.startRoundCalled);
		hostControl.startGame();
		assertTrue(connection.startRoundCalled);
	}

	/** */
	@Test
	public void testParticipantLeft() {

		connection.participantLeftEvent.emit("Horst");
		assertTrue(BottomPanelType.NETWORK_CONNECTION_LOST_PANEL != view.bottomPanelType);
		connection.participantLeftEvent.emit("Fooblubb");
		assertEquals(BottomPanelType.NETWORK_CONNECTION_LOST_PANEL,
				view.bottomPanelType);
		
		hostControl.getBackEvent().add(new IListener() {
			@Override
			public void handle() {
				fired = true;
			}
		});
		
		view.newGameEvent.emit();
		assertTrue(fired);
		
	}

}
