/*
 * Instituto Superior de Engenharia do Porto
 *
 * Estruturas de Informação
 *
 * 2000/2001
 *
 * ------------------------------------------
 *
 * Miniteste
 *
 */

#include <string>
using namespace std;
#include "mensagememail.h"

CMensagemEMail::CMensagemEMail(const CMensagemEMail& o)
{
	setTo(o.getTo());
	setFrom(o.getFrom());
	setSubject(o.getSubject());
	setText(o.getText());
}

CMensagemEMail::CMensagemEMail(string sTo, string sFrom, string sSub, string sText)
{
	setTo(sTo);
	setFrom(sFrom);
	setSubject(sSub);
	setText(sText);
}

CMensagemEMail::CMensagemEMail(char* pszTo, char* pszFrom, char* pszSubject, char* pszText)
{
	setTo(pszTo);
	setFrom(pszFrom);
	setSubject(pszSubject);
	setText(pszText);
}

bool operator==(const CMensagemEMail& a, const CMensagemEMail& b)
{
	if (a.getTo() == b.getTo()
	&& a.getFrom() == b.getFrom()
	&& a.getSubject() == b.getSubject()
	&& a.getText() == b.getText())
		return true;
	else
		return false;
}

CMensagemEMail& CMensagemEMail::operator=(const CMensagemEMail& o)
{
	setTo(o.getTo());
	setFrom(o.getFrom());
	setSubject(o.getSubject());
	setText(o.getText());
	return *this;
}

long CMensagemEMail::duracaoTransmissao(long bps) const
{
	long nTamanho = getTo().length() + getSubject().length() + getText().length();
	// nTamanho é o tamanho em bytes, é necessário multiplicar por 8 para determinar 
	//numero de bits, no entanto, nas transmissões usam-se 10 bits (8 + start + stop)
	return nTamanho*10/bps;
}


CMensagemEMail reply(const CMensagemEMail& msgOriginal, string sResposta)
{
	CMensagemEMail msgR(msgOriginal.getFrom(), msgOriginal.getTo(), "RE:"+msgOriginal.getSubject(), sResposta);
	return msgR;
}

ostream& operator<<(ostream& output, const CMensagemEMail& obj)
{
	output << "FROM: " << obj.getFrom() << endl;
	output << "TO: " << obj.getTo() << endl;
	output << "SUBJECT: " << obj.getSubject() << endl;
	output << "(tempo de transmissão estimado 28Kbps: " << obj.duracaoTransmissao(_28Kb) << " segundos)" << endl;
	output << "TEXT:" << endl << obj.getText() << endl;

	return output;
}
