package magic.ui.screen.deck.editor;
import javax.swing.JPanel;
import magic.data.GeneralConfig;
import magic.model.MagicCardDefinition;
import magic.model.MagicDeck;
import magic.model.MagicDeckConstructionRule;
import magic.translate.MText;
import magic.ui.ScreenController;
import magic.ui.widget.deck.stats.PwlWorker;
import magic.utility.MagicSystem;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
class ContentPanel extends JPanel {
// translatable strings
private static final String _S1 = "This deck is illegal.\n\n%s";
private static final GeneralConfig CONFIG = GeneralConfig.getInstance();
private final DeckEditorController controller = DeckEditorController.instance;
private final MigLayout migLayout = new MigLayout();
private final DeckSideBar sideBarPanel; // LHS
private final MainViewsPanel viewsPanel; // RHS
private final DeckEditorScreen screen;
private boolean isStandalone = true;
private PwlWorker pwlWorker;
ContentPanel(DeckEditorScreen screen) {
MagicSystem.waitForAllCards();
this.screen = screen;
// lhs
sideBarPanel = new DeckSideBar();
// rhs
viewsPanel = new MainViewsPanel(this);
//
setLookAndFeel();
refreshLayout();
}
private void setLookAndFeel() {
setOpaque(false);
setLayout(migLayout);
}
private void refreshLayout() {
removeAll();
migLayout.setLayoutConstraints("insets 0, gap 0");
add(sideBarPanel, "h 100%");
add(viewsPanel, "w 100%, h 100%");
}
void setCard(final MagicCardDefinition card) {
final int cardCount = controller.getDeck().getCardCount(card);
sideBarPanel.setCard(card);
sideBarPanel.setCardCount(cardCount);
}
void doRefreshView() {
viewsPanel.doRefreshViews();
}
MagicDeck getDeck() {
return controller.getDeck();
}
private String getBrokenRules(final MagicDeck deck) {
return MagicDeckConstructionRule.getRulesText(MagicDeckConstructionRule.checkDeck(deck));
}
private void notifyUser(final String brokenRules) {
ScreenController.showWarningMessage(MText.get(_S1, brokenRules));
}
boolean validateDeck(final boolean notifyUser) {
final String brokenRules = getBrokenRules(controller.getDeck());
if (brokenRules.length() > 0) {
if (notifyUser) {
notifyUser(brokenRules);
}
return false;
}
return true;
}
void setIsStandalone(final boolean b) {
this.isStandalone = b;
}
void deckUpdated(MagicDeck deck) {
if (deck.isEmpty() && isStandalone) {
CONFIG.setMostRecentDeckFilename("");
CONFIG.save();
}
screen.deckUpdated(deck);
doPWLStatsQuery(deck);
}
void cardSelected(MagicCardDefinition card) {
setCard(card);
sideBarPanel.setDeck(getDeck());
}
private void doPWLStatsQuery(MagicDeck deck) {
pwlWorker = new PwlWorker(deck);
pwlWorker.setListeners(sideBarPanel, viewsPanel);
pwlWorker.execute();
}
void showDecksScreen() {
screen.showDecksScreen();
}
}