package steps;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import java.util.ArrayList;
import org.junit.Assert;
import seng302.gameServer.GameStages;
import seng302.gameServer.GameState;
import seng302.gameServer.MainServerThread;
import seng302.gameServer.messages.BoatAction;
import seng302.model.ServerYacht;
import seng302.visualiser.ClientToServerThread;

/**
 * Cucumber test for toggling sail
 * Created by kre39 on 7/08/17.
 */
public class ToggleSailSteps {

    MainServerThread mst;
    ClientToServerThread client;
    long startTime;

    @Given("^The game is running$")
    public void the_game_is_running() throws Throwable {
        mst = new MainServerThread();
        client = new ClientToServerThread("localhost", 4942);
        GameState.setCurrentStage(GameStages.RACING);
        Thread.sleep(200); // Sleep needed to help the threads all be up to speed with each other
        ServerYacht yacht = (new ArrayList<>(GameState.getYachts().values())).get(0);
        Assert.assertFalse(yacht.getSailIn());
    }


    @When("^the user has pressed \"([^\"]*)\"$")
    public void the_user_has_pressed(String arg1) throws Throwable {
        startTime = System.currentTimeMillis();
        if (arg1 == "shift") {
            client.sendBoatAction(BoatAction.SAILS_IN);
        }
    }

    @Then("^the sails are \"([^\"]*)\"$")
    public void the_sails_are(String arg1) throws Throwable {
        Thread.sleep(200); // Sleep needed to help the threads all be up to speed with each other
        ServerYacht yacht = (new ArrayList<>(GameState.getYachts().values())).get(0);
        if (arg1 == "in") {
            Assert.assertTrue(yacht.getSailIn());
        } else {
            Assert.assertFalse(yacht.getSailIn());
        }
        mst.terminate();
        client.closeSocket();
    }
}
