key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
/*
**               j###t  ########## ####   ####
**              j###t   ########## ####   ####
**             j###T               "###L J###"
**          ######P'    ##########  #########
**          ######k,    ##########   T######T
**          ####~###L   ####
**          #### q###L  ##########   .#####
**          ####  \###L ##########   #####"
*/

package key;

import key.collections.NumberedCollection;
import key.primitive.DateTime;

import java.util.Enumeration;
import java.util.StringTokenizer;
import java.io.*;

/**
  *  A messageBox is a type of specialised container for
  *  containing letters
 */
public class MessageBox extends MaterialContainer
{
	private static final long serialVersionUID = -1619021870941708968L;
	
	public static final TableParagraph.Column[] columns =
	{
		new TableParagraph.Column( "[##]", 4 ),
		new TableParagraph.Column( "From", Player.MAX_NAME ),
		new TableParagraph.Column( "Subject", Letter.MAX_SUBJECT )
	};
	
	public MessageBox()
	{
		contained = new NumberedCollection();
		
		setConstraint( Type.LETTER );
	}
	
	public MessageBox( int newLimit )
	{
		this();
		
		setLimit( newLimit );	
	}
	
	public int countUnread()
	{
		int c = 0;
		
		for( Enumeration e = elements(); e.hasMoreElements(); )
		{
			Letter t = (Letter) e.nextElement();
			
			if( t.readCount == 0 )
				c++;
		}
		
		return( c );
	}
	
	public void read( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom th )
	{
		if( args.hasMoreTokens() )
		{
			String fa = args.nextToken();
			
			int number = 0;
			
			try
			{
				number = Integer.parseInt( fa );
			}
			catch( NumberFormatException e )
			{
				ic.send( "'" + fa + "' is not a number" );
				return;
			}
			
			if( number < 1 )
			{
				ic.send( "You want to read *which* number?" );
			}
			else
			{
				Letter t = (Letter) getElementAt( number - 1 );
				
				if( t == null )
					ic.send( "Can't find that message..." );
				else
				{
					t.read( p, args, ic, flags, t );
				}
			}
			
			return;
		}
		
		if( count() == 0 )
		{
			ic.send( "There aren't any messages in " + getName() );
			return;
		}
		
		TableParagraph.Generator tp = new TableParagraph.Generator( columns );
		
		int i = 1;
		
		for( Enumeration e = elements(); e.hasMoreElements(); )
		{
			Letter t = (Letter) e.nextElement();
			String rowContents[] = new String[ columns.length ];
			
			rowContents[0] = Integer.toString( i );
			rowContents[1] = t.from;
			rowContents[2] = t.description;
			
			tp.appendRow( rowContents );
			
			i++;
		}
		
			//  decrement i to account for the initial 1
		i--;
		
		tp.setFooter( Integer.toString( i ) + " message" + ((i==1)?"":"s") );
		
		ic.send( tp.getParagraph() );
	}
}