package magic.ui.screen.duel.setup;
import magic.data.DuelConfig;
import magic.exception.InvalidDeckException;
import magic.translate.MText;
import magic.ui.ScreenController;
import magic.ui.WikiPage;
import magic.ui.screen.HeaderFooterScreen;
import magic.ui.screen.MScreen;
import magic.ui.screen.widget.MenuButton;
@SuppressWarnings("serial")
public class NewDuelSettingsScreen extends HeaderFooterScreen {
// translatable strings
private static final String _S1 = "New Duel Settings";
private static final String _S2 = "Cancel";
private static final String _S3 = "Next";
private static final String _S4 = "Invalid Deck\n%s";
private static final String _S5 = "%s's deck is invalid.";
private static final String _S6 = "The following player decks are invalid :-\n\n";
private static final int PLAYERS_COUNT = 2;
private static final DuelConfig duelConfig = DuelConfig.getInstance();
private final ScreenContentPanel contentPanel;
public NewDuelSettingsScreen() {
super(MText.get(_S1));
duelConfig.load();
contentPanel = new ScreenContentPanel(duelConfig);
setMainContent(contentPanel);
setLeftFooter(MenuButton.getCloseScreenButton(MText.get(_S2)));
setRightFooter(MenuButton.build(this::doNextAction, MText.get(_S3)));
setWikiPage(WikiPage.NEW_DUEL);
}
private void doNextAction() {
if (isEachPlayerDeckValid(true)) {
updateDuelConfig();
ScreenController.closeActiveScreen(false);
try {
ScreenController.getFrame().newDuel(duelConfig);
} catch (InvalidDeckException ex) {
ScreenController.showWarningMessage(MText.get(_S4, ex.getMessage()));
}
}
}
private boolean isEachPlayerDeckValid(final boolean showErrorDialog) {
boolean isEachDeckValid = true;
final StringBuffer sb = new StringBuffer();
if (!contentPanel.isDeckValid(0)) {
sb.append(MText.get(_S5, contentPanel.getPlayerProfile(0).getPlayerName())).append("\n");
isEachDeckValid = false;
}
if (!contentPanel.isDeckValid(1)) {
sb.append(MText.get(_S5, contentPanel.getPlayerProfile(1).getPlayerName()));
isEachDeckValid = false;
}
if (!isEachDeckValid && showErrorDialog) {
sb.insert(0, MText.get(_S6));
ScreenController.showWarningMessage(sb.toString());
}
return isEachDeckValid;
}
private void updateDuelConfig() {
duelConfig.setStartLife(contentPanel.getStartLife());
duelConfig.setHandSize(contentPanel.getHandSize());
duelConfig.setNrOfGames(contentPanel.getNrOfGames());
duelConfig.setCube(contentPanel.getCube());
for (int i = 0; i < PLAYERS_COUNT; i++) {
duelConfig.setPlayerProfile(i, contentPanel.getPlayerProfile(i));
duelConfig.setPlayerDeckProfile(i, contentPanel.getDeckType(i), contentPanel.getDeckValue(i));
}
}
@Override
public boolean isScreenReadyToClose(MScreen nextScreen) {
if (isEachPlayerDeckValid(false)) {
updateDuelConfig();
}
return true;
}
}