package dekk.pw.pokemate.tasks;
import POGOProtos.Networking.Responses.UseItemEggIncubatorResponseOuterClass;
import com.pokegoapi.api.inventory.EggIncubator;
import com.pokegoapi.api.pokemon.EggPokemon;
import com.pokegoapi.exceptions.LoginFailedException;
import com.pokegoapi.exceptions.RemoteServerException;
import dekk.pw.pokemate.Context;
import dekk.pw.pokemate.PokeMateUI;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created by $ Tim Dekker on 7/23/2016.
*/
class IncubateEgg extends Task implements Runnable{
private static final Logger logger = LogManager.getLogger(IncubateEgg.class);
IncubateEgg(final Context context) {
super(context);
}
@Override
public void run() {
try {
List<EggIncubator> incubators = context.getInventories().getIncubators().stream().filter(i -> {
try {
return !i.isInUse();
} catch (Exception e) {
logger.error("Incubator Error", e);
return false;
}
}).collect(Collectors.toList());
List<EggPokemon> eggs = context.getInventories().getHatchery().getEggs().stream().filter(egg ->
egg.getEggIncubatorId() == null || egg.getEggIncubatorId().isEmpty()).collect(Collectors.toList());
if (incubators.size() > 0 && eggs.size() > 0) {
UseItemEggIncubatorResponseOuterClass.UseItemEggIncubatorResponse.Result result = incubators.get(0).hatchEgg(eggs.get(0));
if (result.equals(UseItemEggIncubatorResponseOuterClass.UseItemEggIncubatorResponse.Result.SUCCESS)) {
String eggresult = "Now incubating egg ( " + eggs.get(0).getEggKmWalkedTarget() + "km)";
PokeMateUI.toast(eggresult, "Egg Incubated!", "icons/items/egg.png");
context.setConsoleString("IncubateEgg", eggresult);
}
}
} catch (LoginFailedException e) {
logger.error("Login Failed", e);
context.setConsoleString("IncubateEgg", "Login Error.");
} catch (RemoteServerException e) {
context.setConsoleString("IncubateEgg", "Server Error.");
logger.error("Remote Server Exception", e);
} finally {
context.addTask(new IncubateEgg(context));
}
}
}