package magic.ui.screen.deck.hand;
import magic.ui.screen.HandZoneLayout;
import java.util.List;
import java.util.stream.Collectors;
import magic.data.GeneralConfig;
import magic.data.MagicIcon;
import magic.model.MagicCardDefinition;
import magic.model.MagicDeck;
import magic.translate.MText;
import magic.ui.screen.HeaderFooterScreen;
import magic.ui.screen.MScreen;
import magic.ui.screen.widget.MenuButton;
import magic.ui.widget.cards.canvas.CardsCanvas;
import magic.ui.widget.cards.canvas.CardsCanvas.LayoutMode;
import magic.ui.widget.deck.DeckStatusPanel;
@SuppressWarnings("serial")
public class SampleHandScreen extends HeaderFooterScreen {
// translatable strings
private static final String _S1 = "Sample Hand";
private static final String _S3 = "Refresh";
private static final String _S4 = "Deal a new sample hand.";
private CardsCanvas content;
private final MagicDeck deck;
private final DeckStatusPanel deckStatusPanel = new DeckStatusPanel();
private OptionsPanel optionsPanel;
public SampleHandScreen(final MagicDeck aDeck) {
super(MText.get(_S1));
this.deck = aDeck;
useLoadingScreen(this::initUI);
}
private void initUI() {
content = new CardsCanvas();
setCardsLayout();
content.setAnimationDelay(50, 20);
content.setLayoutMode(LayoutMode.SCALE_TO_FIT);
content.refresh(getSampleHand(deck));
setMainContent(content);
deckStatusPanel.setDeck(deck, false);
optionsPanel = new OptionsPanel(this);
setHeaderContent(deckStatusPanel);
setHeaderOptions(optionsPanel);
addToFooter(MenuButton.build(this::dealSampleHand,
MagicIcon.REFRESH, MText.get(_S3), MText.get(_S4))
);
}
private void dealSampleHand() {
if (!content.isBusy()) {
content.refresh(getSampleHand(deck));
}
}
private List<MagicCardDefinition> getSampleHand(MagicDeck deck) {
return deck.getRandomCards(7).stream()
.sorted(MagicCardDefinition.SORT_BY_NAME)
.collect(Collectors.toList());
}
private void setCardsLayout() {
switch (HandZoneLayout.getLayout()) {
case STACKED_DUPLICATES:
content.setStackDuplicateCards(true);
break;
case NO_STACKING:
content.setStackDuplicateCards(false);
break;
default:
throw new IndexOutOfBoundsException();
}
}
void doSwitchLayout() {
HandZoneLayout.setNextLayout();
setCardsLayout();
}
private void doSaveSettings() {
HandZoneLayout.save();
GeneralConfig.getInstance().save();
}
@Override
public boolean isScreenReadyToClose(MScreen nextScreen) {
if (super.isScreenReadyToClose(nextScreen)) {
doSaveSettings();
return true;
}
return false;
}
}