import javax.swing.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;

public class SwingPresenter {
	private Main main;
	private JPanel mainPanel;
	protected Map<String, Component> components = new HashMap<>();

	public SwingPresenter(Main main, JPanel mainPanel) {
		this.main = main;
		this.mainPanel = mainPanel;
	}

	public void screenUpdate(Map<String, Object> value) {
		mainPanel.removeAll();
		Map<String, Object> widgets = (Map<String, Object>) value.get("widgets");
		boolean layout = (boolean) value.get("layout");
		if (layout) {
			mainPanel.setLayout(new FlowLayout());
			for (String key : widgets.keySet()) {
				String type = (String) ((Map<String, Object>) widgets.get(key)).get("type");
				String text = (String) ((Map<String, Object>) widgets.get(key)).get("text");
				boolean visible = (boolean) ((Map<String, Object>) widgets.get(key)).get("visible");
				int state = (int) ((Map<String, Object>) widgets.get(key)).get("state");
				if (type.equals("textInput")) {
					JTextField textField = new JTextField(10);
					mainPanel.add(textField);
					components.put(key, textField);
				} else if (type.equals("label")) {
					JLabel label = new JLabel(text);
					mainPanel.add(label);
					components.put(key, label);
				} else if (type.equals("button")) {
					JButton button = new JButton(text);
					button.setSize(100, 20);
					mainPanel.add(button);
					components.put(key, button);
				} else if (type.equals("table")) {

				}
			}
		} else {
			mainPanel.setLayout(null);
			for (String key : widgets.keySet()) {
				String type = (String) ((Map<String, Object>) widgets.get(key)).get("type");
				int y = (int) ((Map<String, Object>) widgets.get(key)).get("y");
				int x = (int) ((Map<String, Object>) widgets.get(key)).get("x");
				int height = (int) ((Map<String, Object>) widgets.get(key)).get("height");
				String text = (String) ((Map<String, Object>) widgets.get(key)).get("text");
				boolean visible = (boolean) ((Map<String, Object>) widgets.get(key)).get("visible");
				int width = (int) ((Map<String, Object>) widgets.get(key)).get("width");
				int state = (int) ((Map<String, Object>) widgets.get(key)).get("state");
				if (type.equals("textInput")) {
					JTextField textField = new JTextField(10);
					textField.setLocation(x, y);
					textField.setSize(width, height);
					mainPanel.add(textField);
					components.put(key, textField);
				} else if (type.equals("label")) {
					JLabel label = new JLabel(text);
					label.setLocation(x, y);
					label.setSize(width, height);
					mainPanel.add(label);
					components.put(key, label);
				} else if (type.equals("button")) {
					JButton button = new JButton(text);
					button.setLocation(x, y);
					button.setSize(width, height);
				} else if (type.equals("table")) {

				}
			}
		}
		mainPanel.invalidate();
		mainPanel.validate();
		mainPanel.repaint();
	}
}
