package edu.ncsu.csc.itrust.beans;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * A bean for storing data about Fake Emails.
 * 
 * A bean's purpose is to store data. Period. Little or no functionality is to be added to a bean 
 * (with the exception of minor formatting such as concatenating phone numbers together). 
 * A bean must only have Getters and Setters (Eclipse Hint: Use Source > Generate Getters and Setters
 * to create these easily)
 */
public class Email {
	private List<String> toList = new ArrayList<String>();
	private String from = "";
	private String subject = "";
	private String body = "";
	private Timestamp timeAdded;

	public List<String> getToList() {
		return toList;
	}

	public void setToList(List<String> toList) {
		this.toList = toList;
	}

	public String getToListStr() {
		String str = "";
		StringBuffer buf = new StringBuffer();
		for (String addr : toList) {
			buf.append(addr + ",");
		}
		str = buf.toString();
		
		if(str.length() < 1)
			return str;
		else
			return str.substring(0, str.length() - 1);
	}

	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public Timestamp getTimeAdded() {
		return (Timestamp) timeAdded.clone();
	}

	public void setTimeAdded(Timestamp timeAdded) {
		this.timeAdded = (Timestamp) timeAdded.clone();
	}

	@Override
	public boolean equals(Object obj) {
		return obj != null && obj.getClass().equals(this.getClass()) && this.equals((Email) obj);
	}

	@Override
	public int hashCode() {
		return 42; // any arbitrary constant will do
	}

	private boolean equals(Email other) {
		return from.equals(other.from) && subject.equals(other.subject) && body.equals(other.body)
				&& listEquals(toList, other.toList);
	}

	private boolean listEquals(List<String> toList, List<String> otherToList) {
		if (toList.size() != otherToList.size())
			return false;
		for (int i = 0; i < toList.size(); i++) {
			if (!toList.get(i).equals(otherToList.get(i)))
				return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "FROM: " + from + " TO: " + toList.toString() + " SUBJECT: " + subject + " BODY: " + body;
	}

}