package magic.model.choice;
import java.util.Collection;
import java.util.List;
import magic.data.GeneralConfig;
import magic.exception.UndoClickedException;
import magic.model.IUIGameController;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.MagicSource;
import magic.model.event.MagicEvent;
public class MagicSimpleMayChoice extends MagicChoice {
public static final int DRAW_CARDS = 1;
public static final int GAIN_LIFE = 2; // always returns YES_CHOICE_LIST
public static final int LOSE_LIFE = 3;
public static final int OPPONENT_LOSE_LIFE = 4; // always returns YES_CHOICE_LIST
public static final int UNTAP = 5; // always returns YES_CHOICE_LIST
public static final int BECOME_CREATURE = 6; // always returns YES_CHOICE_LIST
public static final int ADD_POS_COUNTER = 7; // always returns YES_CHOICE_LIST
public static final int ADD_PLUSONE_COUNTER = 8; // always returns YES_CHOICE_LIST
public static final int PLAY_TOKEN = 9; // always returns YES_CHOICE_LIST
public static final int PUMP = 10; // always returns YES_CHOICE_LIST
public static final int COUNTER_SPELL = 11; // always returns YES_CHOICE_LIST
public static final int DEFAULT_NONE = 0;
public static final int DEFAULT_NO = 1;
public static final int DEFAULT_YES = 2;
private final int action;
private final int amount;
private int defaultChoice;
private MagicSimpleMayChoice(final String description,final int action,final int amount,final int defaultChoice) {
super(description);
this.action = action;
this.amount = amount;
this.defaultChoice = defaultChoice;
}
public MagicSimpleMayChoice(final String description) {
this(description, 0, 0, DEFAULT_YES);
}
public MagicSimpleMayChoice() {
this(0, 0, DEFAULT_YES);
}
public MagicSimpleMayChoice(final int action) {
this(action, 0, DEFAULT_YES);
}
public MagicSimpleMayChoice(final int action, final int defaultChoice) {
this(action, 0, defaultChoice);
}
public MagicSimpleMayChoice(final int action, final int amount,final int defaultChoice) {
this("Proceed with \"may\" action?", action, amount, defaultChoice);
}
@Override
Collection<Object> getArtificialOptions(final MagicGame game,final MagicEvent event) {
throw new UnsupportedOperationException();
}
@Override
public List<Object[]> getArtificialChoiceResults(final MagicGame game,final MagicEvent event) {
final MagicPlayer player = event.getPlayer();
boolean yes = true;
switch (action) {
case DRAW_CARDS:
yes = player.getLibrary().size() - amount >= 1;
break;
case LOSE_LIFE:
yes = player.getLife() - amount >= 1;
break;
}
return yes ? YES_CHOICE_LIST : NO_CHOICE_LIST;
}
@Override
public Object[] getPlayerChoiceResults(final IUIGameController controller, final MagicGame game, final MagicEvent event) throws UndoClickedException {
final MagicSource source = event.getSource();
final boolean hints = GeneralConfig.getInstance().getSmartTarget();
if (hints && defaultChoice != DEFAULT_NONE) {
return (defaultChoice == DEFAULT_NO) ?
new Object[]{NO_CHOICE} :
new Object[]{YES_CHOICE};
}
controller.disableActionButton(false);
if (controller.getMayChoice(source, getDescription())) {
return new Object[]{YES_CHOICE};
}
return new Object[]{NO_CHOICE};
}
}