package rpicq;

import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;

/**
 * This class holds the list of users that the local user can talk with.
 * You should not have to do much with this class that isn't already done in
 * the skeleton code.
 *
 * Use the setUsers(), addUserName(), and removeUserName() methods to control
 * which users this user can talk to.
 **/
public class UserListFrame extends JFrame {

    JList mUserList;
    Vector mList = new Vector();
    String mUserName = "You should really change the user name";
    private UIEventListener mUIEventListener;
    
    public void setUsers(Vector inVect) {
	mList = (Vector)inVect.clone();
	mUserList.setListData(mList);
	repaint();
    }

    public void addUserName( String name ) {
	mList.add(name);
	mUserList.setListData(mList);	
	repaint();
    }

    public void removeUserName( String name ) {
	mList.remove(name);
	mUserList.setListData(mList);
 	repaint();
    }

    public UserListFrame(String inUserName) {
	super("RPIcq");
	mUserName = inUserName;
	createUI();
    }

    public void setVisible(boolean state) {
	if (mUIEventListener == null && state == true) {
	    System.err.println("UI WARNING: Showing the UserListFrame without"
			       + " a UIEventListener");
	    System.err.println(" 	 You should call .setUIEventListener()"
			       + " before .setVisible()" );
	}
	else if (state) {
	    String name = JOptionPane
		.showInputDialog(this, "Please enter user name",
				 "Login to RPIcq",
				 JOptionPane.QUESTION_MESSAGE);
	    if (name == null || name.equals("")) {
		JOptionPane
		    .showMessageDialog(this, "You must enter a user name",
				       "Error", JOptionPane.ERROR_MESSAGE);
		System.exit(0);
	    }
	    else {
		mUserName = name;
		mUIEventListener.loginUser( mUserName );
	    }
	}
	super.setVisible(state);
    }
    
    public void setUIEventListener( UIEventListener inl ) {
	mUIEventListener = inl;
    }

    public void removeUIEventListener( UIEventListener inl ) {
	mUIEventListener = null;
    }    

    public String getUserName() {
	return mUserName;
    }

    public void setUserName(String inUser) {
	mUserName = inUser;
    }
    
    private void createUI() {
	this.getContentPane().setLayout( new GridLayout(1,1) );

	mUserList = new JList();
	mUserList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
	this.getContentPane().add( new JScrollPane( mUserList) );
	
	mUserList.addMouseListener( new MouseAdapter() {
		public void mouseClicked(MouseEvent e) {
		    if ((e.getClickCount() == 2) && (!mUserList.isSelectionEmpty())) {
			MessageSplitFrame messageFrame =
			    new MessageSplitFrame(mUserName,
				   (String)mUserList.getSelectedValue(),
				   mUIEventListener );

			mUIEventListener
			    .startConversation(mUserName,
				   (String)mUserList.getSelectedValue(),
				   messageFrame );
		    }
       		}
	    });

	this.pack();

	this.addWindowListener( new WindowAdapter() {
		public void windowClosing(WindowEvent event) {
		    setVisible(false);
		    mUIEventListener.sessionStop();
		}
	    });
    }

    public static void main(String argv[]) {

	UserListFrame uf = new UserListFrame("Bob");
	/* old test code
	   for(int i=0; i<20; i++)	
	   uf.addUserName("user " + i );	
	   uf.setUIEventListener( new UIEventAdapter() );
	*/
	uf.setVisible(true);
    }
    

}






