package me.corriekay.pokegoutil.data.models.operations; import com.pokegoapi.exceptions.InvalidCurrencyException; import com.pokegoapi.exceptions.LoginFailedException; import com.pokegoapi.exceptions.RemoteServerException; import me.corriekay.pokegoutil.data.enums.OperationError; import me.corriekay.pokegoutil.data.managers.AccountManager; import me.corriekay.pokegoutil.data.models.BpmOperationResult; import me.corriekay.pokegoutil.data.models.PokemonModel; import me.corriekay.pokegoutil.gui.enums.OperationId; import me.corriekay.pokegoutil.utils.ConfigKey; public class PowerupOperation extends Operation { /** * Instantiate PowerupOperation. Only used in mocking. */ protected PowerupOperation() { // For mocking super(); } /** * Instantiate PowerupOperation with a pokemon. * * @param pokemon pokemon to power up */ public PowerupOperation(final PokemonModel pokemon) { super(pokemon); } @Override protected BpmOperationResult doOperation() { return new BpmOperationResult("Not implemented", OperationError.NOT_IMPLEMENTED); } @Override protected int getMaxDelay() { return config.getInt(ConfigKey.DELAY_POWERUP_MAX); } @Override protected int getMinDelay() { return config.getInt(ConfigKey.DELAY_POWERUP_MIN); } @Override public OperationId getOperationId() { return OperationId.POWERUP; } @Override public BpmOperationResult validateOperation() throws InvalidCurrencyException, LoginFailedException, RemoteServerException { if (pokemon.isInGym()) { return new BpmOperationResult("Pokemon is in gym", OperationError.IN_GYM); } final int candies = pokemon.getCandies(); final int candiesToPowerup = pokemon.getCandyCostsForPowerup(); if (candies < candiesToPowerup) { return new BpmOperationResult(String.format( "Insufficent candies, needed %d but had %d ", candiesToPowerup, candies), OperationError.INSUFFICENT_CANDIES); } final int stardust = AccountManager.getInstance().getPlayerAccount().getStardust(); final int stardustToPowerUp = pokemon.getStardustCostsForPowerup(); if (stardust < stardustToPowerUp) { return new BpmOperationResult(String.format( "Insufficent stardust, needed %d but had %d ", stardustToPowerUp, stardust), OperationError.INSUFFICENT_STARDUSTS); } return new BpmOperationResult(); } }