// The main creates two different email message lists
//      (in a class we don't see)
public static void main(String[] args)
{
    // Construct two MsgList objects and put them in variables
    // called “inbox” and “Trash”. Each should show 5
    // messages at a time.

    MsgList inbox = new MsgList();
    MsgList trash = new MsgList();

    // Create 3 Msg objects, one of which should be from
    // you to Alyce or Pam, with the subject “testing” and
    // the body “This is a test.”
    Msg msg1 = new Msg("abrady@kzoo.edu", "student@kzoo.edu",
        "testing", "This is a test.");
    Msg msg2 = new Msg("pcutter@kzoo.edu", "student@kzoo.edu",
        "testing again", "This is another test.");
    Msg msg3 = new Msg("abrady@kzoo.edu", "student@kzoo.edu",
        "still testing", "This is a third test.");

    // Add all 3 messages to your inbox. Then
    // add them again to have 6 messages total.
    inbox.receive(msg1);
    inbox.receive(msg2);
    inbox.receive(msg3);
    inbox.receive(msg1);
    inbox.receive(msg2);
    inbox.receive(msg3);

    // List the messages in your inbox starting with the first.
    inbox.listMsgHeaders(0);

    // Display the body of the 2nd message.
    inbox.displayBody(1);

    // List the messages in your inbox starting with the third.
    inbox.listMsgHeaders(2);

    // Move the 2nd message from your inbox to the Trash.
    inbox.move(1, trash);

}


public class Msg
{
    private String recipient;
    private String sender;
    private String subject;
    private String body;

    public Msg(String to, String from, String subject, String body)
    {
        this.recipient = to;
        this.sender = from;
        this.subject = subject;
        this.body = body;
    }

    public String getToField()
    {
        return this.recipient;
    }

    public String getFromField()
    {
        return this.sender;
    }

    public String getSubject()
    {
        return this.subject;
    }

    public String getMsgBody()
    {
        return this.body;
    }

}

public class MsgList
{
    private int numToShow;
    private ArrayList<Msg> msgList;

    public MsgList(int numHeadersToShow)
    {
        this.numToShow = numHeadersToShow;
        this.msgList = new ArrayList<Msg>();
    }

    public void receive(Msg newMsg)
    {
        this.msgList.add(newMsg);
    }

    public void displayBody(int msgNum)
    {
        System.out.println(this.msgList.get(msgNum).getMsgBody());
        // OR:
        //    Msg whichMsg = this.msgList.get(msgNum);
        //    String body = whichMsg.getMsgBody();
        //    System.out.println(body);
    }

    public void listMsgHeaders(int startingWith)
    {
        // Determine start and end indices of messages to show.
        int startIndex = startingWith;
        int endIndex = startingWith + this.numToShow;
        for ( int i = startIndex; i < endIndex; i++ )
        {
            Msg m = msgList.get(i);
            System.out.println("To: " + m.getToField());
            System.out.println("From: " + m.getFromField());
            System.out.println("Subject: " + m.getSubject());
        }
    }

    public void move(int msgNum, MsgList folder)
    {
        // Add the message to the other folder, then delete from this list.
        folder.receive(this.msgList.get(msgNum));
        this.msgList.remove(msgNum);
    }

}