package mchat;

import ezagent.EzAgent;
import ezagent.Message;

import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.rmi.RemoteException;

/**
 *  
 */
public class ChatClientGUI implements ActionListener
{
    private JTextArea itsInputArea;
    private JTextArea itsMessageArea;
    private EzAgent client;
    private String chatRoom;
    private JScrollPane itsMessagePane;

    public ChatClientGUI(EzAgent client, String chatRoom)
    {
        this.client = client;
        this.chatRoom = chatRoom;
        initGUI();
    }

    public void actionPerformed(ActionEvent event)
    {
        if (!itsInputArea.getText().equals(""))
        {
            sendToClient(new Message(ChatClientProtocol.MSG_POST,
                    itsInputArea.getText()));

            itsInputArea.setText("");
        }
    }

    public void newMessage(String message)
    {
        try
        {
            Document theDocument = itsMessageArea.getDocument();
            theDocument.insertString(theDocument.getLength(),
                    "\n" + message, null);
        }
        catch (BadLocationException e)
        {
            e.printStackTrace();
        }
        JScrollBar theVerticalScrollBar = itsMessagePane.getVerticalScrollBar();
        theVerticalScrollBar.setValue(theVerticalScrollBar.getMaximum());
    }

    private void sendToClient(Message m)
    {
        try
        {
            client.getCurrentPlace().deliver(m, client.getId());
        }
        catch (RemoteException e)
        {
            e.printStackTrace();
        }
    }

    private void initGUI()
    {
        final JFrame frame = new JFrame("ChatClient -- " + client.getId() + "@" + chatRoom);
        JPanel main = new JPanel();
        main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));

        itsMessageArea = new JTextArea();
        itsMessageArea.setEditable(false);
        itsMessagePane = new JScrollPane(itsMessageArea);
        itsMessagePane.setPreferredSize(new Dimension(400, 350));
        itsMessagePane.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
        main.add(itsMessagePane);

        JPanel input = new JPanel();
        input.setLayout(new BoxLayout(input, BoxLayout.X_AXIS));

        itsInputArea = new JTextArea();
        itsInputArea.setMaximumSize(new Dimension(250, 50));
        itsInputArea.setPreferredSize(new Dimension(250, 50));
        itsInputArea.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
        input.add(itsInputArea);

        JButton ok = new JButton("Ok");
        ok.addActionListener(this);
        input.add(ok);

        main.add(new JLabel(" "));
        main.add(input);

        frame.setContentPane(main);
        frame.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                sendToClient(new Message(ChatClientProtocol.MSG_DIE));
                frame.dispose();
            }
        });
        frame.pack();
        frame.show();
    }
}