package net.blay09.mods.eirairc.client.gui.servers;
import net.blay09.mods.eirairc.client.gui.GuiEiraIRCConfig;
import net.blay09.mods.eirairc.client.gui.base.GuiAdvancedTextField;
import net.blay09.mods.eirairc.client.gui.base.GuiLabel;
import net.blay09.mods.eirairc.client.gui.base.tab.GuiTabContainer;
import net.blay09.mods.eirairc.client.gui.base.tab.GuiTabPage;
import net.blay09.mods.eirairc.client.gui.overlay.OverlayYesNo;
import net.blay09.mods.eirairc.config.AuthManager;
import net.blay09.mods.eirairc.config.ChannelConfig;
import net.blay09.mods.eirairc.config.ConfigurationHandler;
import net.blay09.mods.eirairc.config.ServerConfig;
import net.blay09.mods.eirairc.util.Globals;
import net.blay09.mods.eirairc.util.I19n;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiYesNoCallback;
import net.minecraftforge.fml.client.config.GuiCheckBox;
import net.minecraftforge.fml.client.config.GuiConfig;
import org.lwjgl.input.Keyboard;
public class GuiChannelConfig extends GuiTabPage implements GuiYesNoCallback {
private final GuiServerConfig parent;
private final ServerConfig serverConfig;
private final ChannelConfig config;
private GuiAdvancedTextField txtName;
private GuiAdvancedTextField txtPassword;
private GuiCheckBox chkAutoJoin;
private GuiButton btnTheme;
private GuiButton btnBotSettings;
private GuiButton btnOtherSettings;
private GuiButton btnOK;
private GuiButton btnDelete;
private boolean isNew;
public GuiChannelConfig(GuiTabContainer tabContainer, GuiServerConfig parent) {
super(tabContainer, parent);
this.parent = parent;
this.serverConfig = parent.getServerConfig();
this.config = new ChannelConfig(serverConfig);
isNew = true;
}
public GuiChannelConfig(GuiTabContainer tabContainer, GuiServerConfig parent, ChannelConfig config) {
super(tabContainer, parent);
this.parent = parent;
this.serverConfig = parent.getServerConfig();
this.config = config;
}
@Override
public void initGui() {
super.initGui();
Keyboard.enableRepeatEvents(true);
allowSideClickClose = false;
final int leftX = width / 2 - 130;
final int rightX = width / 2 + 130;
final int topY = height / 2 - 80;
String oldText;
labelList.add(new GuiLabel(I19n.format("eirairc:gui.channel.name"), leftX, topY, Globals.TEXT_COLOR));
if(txtName != null) {
oldText = txtName.getText();
} else {
oldText = config.getName();
}
txtName = new GuiAdvancedTextField(0, fontRendererObj, leftX, topY + 15, 100, 15);
txtName.setText(oldText);
textFieldList.add(txtName);
labelList.add(new GuiLabel(I19n.format("eirairc:gui.channel.password"), leftX, topY + 40, Globals.TEXT_COLOR));
if(txtPassword != null) {
oldText = txtPassword.getText();
} else {
oldText = AuthManager.getChannelPassword(config.getIdentifier());
}
txtPassword = new GuiAdvancedTextField(1, fontRendererObj, leftX, topY + 55, 100, 15);
txtPassword.setText(oldText);
txtPassword.setDefaultPasswordChar();
textFieldList.add(txtPassword);
txtName.setNextTabField(txtPassword);
txtPassword.setNextTabField(txtName);
boolean oldState;
if(chkAutoJoin != null) {
oldState = chkAutoJoin.isChecked();
} else {
oldState = config.getGeneralSettings().autoJoin.get();
}
chkAutoJoin = new GuiCheckBox(4, leftX, topY + 75, " " + I19n.format("eirairc:gui.channel.autoJoin"), oldState);
buttonList.add(chkAutoJoin);
btnOK = new GuiButton(4, rightX - 100, topY + 150, 100, 20, I19n.format("eirairc:gui.save"));
buttonList.add(btnOK);
btnDelete = new GuiButton(0, leftX, topY + 150, 100, 20, I19n.format("eirairc:gui.delete"));
btnDelete.packedFGColour = -65536;
buttonList.add(btnDelete);
labelList.add(new GuiLabel(I19n.format("eirairc:gui.override"), rightX - 100, topY + 5, Globals.TEXT_COLOR));
btnTheme = new GuiButton(1, rightX - 100, topY + 15, 100, 20, I19n.format("eirairc:gui.override.theme"));
buttonList.add(btnTheme);
btnBotSettings = new GuiButton(2, rightX - 100, topY + 40, 100, 20, I19n.format("eirairc:gui.override.bot"));
buttonList.add(btnBotSettings);
btnOtherSettings = new GuiButton(3, rightX - 100, topY + 65, 100, 20, I19n.format("eirairc:gui.override.other"));
buttonList.add(btnOtherSettings);
}
public boolean isNew() {
return isNew;
}
@Override
public void actionPerformed(GuiButton button) {
if(button == btnTheme) {
mc.displayGuiScreen(new GuiConfig(tabContainer, GuiEiraIRCConfig.getAllConfigElements(config.getTheme().pullDummyConfig()), Globals.MOD_ID, "channel:" + config.getIdentifier(), false, false, I19n.format("eirairc:gui.config.theme", config.getName())));
} else if(button == btnBotSettings) {
mc.displayGuiScreen(new GuiConfig(tabContainer, GuiEiraIRCConfig.getAllConfigElements(config.getBotSettings().pullDummyConfig()), Globals.MOD_ID, "channel:" + config.getIdentifier(), false, false, I19n.format("eirairc:gui.config.bot", config.getName())));
} else if(button == btnOtherSettings) {
mc.displayGuiScreen(new GuiConfig(tabContainer, GuiEiraIRCConfig.getAllConfigElements(config.getGeneralSettings().pullDummyConfig()), Globals.MOD_ID, "channel:" + config.getIdentifier(), false, false, I19n.format("eirairc:gui.config.other", config.getName())));
} else if(button == btnDelete) {
if(isNew) {
tabContainer.removePage(this);
tabContainer.initGui();
} else {
setOverlay(new OverlayYesNo(this, I19n.format("eirairc:gui.channel.deleteConfirm"), I19n.format("eirairc:gui.channel.deleteNoUndo"), 0));
}
} else if(button == btnOK) {
tabContainer.setCurrentTab(parent, false);
}
}
@Override
public void confirmClicked(boolean result, int id) {
switch(id) {
case 0:
if(result) {
serverConfig.removeChannelConfig(config.getName());
ConfigurationHandler.saveServers();
tabContainer.setCurrentTab(parent, false);
}
break;
case 1:
if(result) {
serverConfig.getBotSettings().messageFormat.set("Classic");
ConfigurationHandler.saveServers();
tabContainer.setCurrentTab(parent, false);
} else {
tabContainer.setCurrentTab(parent, false);
}
break;
}
}
@Override
public boolean requestClose() {
if(overlay == null && serverConfig.getChannelConfigs().size() >= 2 && !serverConfig.getBotSettings().getMessageFormat().mcChannelMessage.contains("{CHANNEL}")) {
setOverlay((new OverlayYesNo(this, I19n.format("eirairc:gui.channel.multiChannel"), I19n.format("eirairc:gui.channel.suggestClassic"), 1)));
return false;
}
return true;
}
@Override
public void onGuiClosed() {
super.onGuiClosed();
Keyboard.enableRepeatEvents(false);
applyChanges();
}
public void applyChanges() {
if(!txtName.getText().isEmpty() && !txtName.getText().equals(config.getName())) {
if(Character.isAlphabetic(txtName.getText().charAt(0))) {
txtName.setText("#" + txtName.getText());
}
serverConfig.removeChannelConfig(config.getName());
config.setName(txtName.getText());
AuthManager.putChannelPassword(config.getIdentifier(), txtPassword.getText());
config.getGeneralSettings().autoJoin.set(chkAutoJoin.isChecked());
serverConfig.addChannelConfig(config);
isNew = false;
}
ConfigurationHandler.saveServers();
}
}