package view;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import client.ClientChatroom;
import client.ClientTopicsManager;

import chat.Chatroom;
import chat.Chatter;

@SuppressWarnings("serial")
public class MainClient extends JFrame implements Chatter, ActionListener {
	private ClientTopicsManager ctm;
	private ClientChatroom curChatroom;
	private boolean isConnected = false;
	
	private UserConfig userConf;
	private TopicsManagerUI topicsManagerUI;
	private ConfConnection confCo;
	
	private JTextArea displayArea = new JTextArea();
	private JButton postButton = new JButton("post");
	private JTextField messageField = new JTextField();
	private JButton userConfButton = new JButton("user conf");
	private JButton topicsManagerUIButton = new JButton("topics management");
	private JButton confCoButton = new JButton("configuration connection");
	private JButton quitButton = new JButton("quit");

	public MainClient(String title, ClientTopicsManager ctm) {
		super(title);
		this.ctm = ctm;
		
		displayArea.setEditable(false);
		userConf = new UserConfig(this, "User config", true);
		topicsManagerUI = new TopicsManagerUI(this, "topics manager", true, ctm);
		confCo = new ConfConnection(this, "conf connection", true, ctm);
		
		initGraphics();
		initListeners();
	}
	
	public void initGraphics() {
		setSize(400,600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		setLayout(new BorderLayout());
		
		JPanel buttonsPanel = new JPanel(new GridLayout(4,1));
		buttonsPanel.add(userConfButton);
		buttonsPanel.add(topicsManagerUIButton);
		buttonsPanel.add(confCoButton);
		buttonsPanel.add(quitButton);
		
		JPanel postPanel = new JPanel(new BorderLayout());
		postPanel.add(messageField, BorderLayout.CENTER);
		postPanel.add(postButton, BorderLayout.EAST);
		
		JPanel mainPanel = new JPanel(new BorderLayout());
		mainPanel.add(displayArea, BorderLayout.CENTER);
		mainPanel.add(postPanel, BorderLayout.SOUTH);
		
		getContentPane().add(mainPanel, BorderLayout.CENTER);
		getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
		
		setVisible(true);
	}
	
	public void initListeners() {
		userConfButton.addActionListener(this);
		topicsManagerUIButton.addActionListener(this);
		confCoButton.addActionListener(this);
		postButton.addActionListener(this);
		quitButton.addActionListener(this);
	}
	
	@Override
	public String getPseudo() {
		return userConf.getPseudo();
	}

	@Override
	public void joinNotification(Chatter c) {
		displayArea.setText(displayArea.getText() + "\n" + c.getPseudo() + " has joined");
	}

	@Override
	public void quitNotification(Chatter c) {
		displayArea.setText(displayArea.getText() + "\n" + c.getPseudo() + " has quit");
	}

	@Override
	public void receiveAMessage(String msg, Chatter c) {
		displayArea.setText(displayArea.getText() + "\n" + c.getPseudo() + " : " + msg);
	}
	
	public boolean isConnected() {
		return isConnected;
	}

	public void setConnected(boolean isConnected) {
		this.isConnected = isConnected;
	}
	
	public void setCurChatroom(Chatroom chatroom) {
		this.curChatroom = (ClientChatroom) chatroom;
	}
	
	public Chatroom getCurrentChatroom() {
		return this.curChatroom;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == userConfButton) {
			userConf.setVisible(true);
		} else if (e.getSource() == topicsManagerUIButton) {
			topicsManagerUI.setVisible(true);
		} else if (e.getSource() == confCoButton) {
			confCo.setVisible(true);
		} else if (e.getSource() == quitButton) {
			System.exit(0);
		} else if (e.getSource() == postButton) {
			System.out.println("post");
			if (!messageField.getText().isEmpty()) {
				curChatroom.post(messageField.getText(), this);
			}
		}
	}
}
