package es.ejie.frmk.infraestructura.mail;

import java.io.Serializable;
import java.util.ArrayList;

/**
 * Representación conceptual del Mensaje de Email. Desarrollará el
 * comportamiento que compone la estructura de un email:
 * <ul>
 * <li> el asunto del email</li>
 * <li> el contenido (texto plano o html)</li>
 * <li> el remitente</li>
 * <li> los diferentes tipos de destinatarios (normal, con copia o oculto)</li>
 * <li> los ficheros adjuntos (normales o incrustados en html)</li>
 * </ul>
 * @version 2.0 Fecha: 22-mar-06
 */
public class Q70MailMessage implements Serializable {
	private Q70MailUser remitente = null;
	private String asunto = null;
	private String textoPlano = null;
	private String textoHTML = null;
	private ArrayList listaDestinatarios = null;
	private ArrayList listaDestinatariosCC = null;
	private ArrayList listaDestinatariosCCO = null;
	private ArrayList listaFicherosAdjuntos = null;
	private ArrayList listaFicherosIncrustados = null;

	/**
	 * Constructor de MailMessage
	 */
	public Q70MailMessage() {
		listaDestinatarios = new ArrayList();
		listaDestinatariosCC = new ArrayList();
		listaDestinatariosCCO = new ArrayList();
		listaFicherosAdjuntos = new ArrayList();
		listaFicherosIncrustados = new ArrayList();
	}

	/**
	 * @param remitente
	 */
	public void setRemitente(Q70MailUser remitente) {
		this.remitente = remitente;
	}

	/**
	 * @return remitente
	 */
	public Q70MailUser getRemitente() {
		return remitente;
	}

	/**
	 * @param asunto
	 */
	public void setAsunto(String asunto) {
		this.asunto = asunto;
	}

	/**
	 * @return asunto
	 */
	public String getAsunto() {
		return asunto;
	}

	/**
	 * @param textoPlano
	 */
	public void setTextoPlano(String textoPlano) {
		this.textoPlano = textoPlano;
	}

	/**
	 * @return texto plano
	 */
	public String getTextoPlano() {
		return textoPlano;
	}

	/**
	 * @param textoHTML
	 */
	public void setTextoHTML(String textoHTML) {
		this.textoHTML = textoHTML;
	}

	/**
	 * @return texto HTML
	 */
	public String getTextoHTML() {
		return textoHTML;
	}

	/**
	 * @param user
	 */
	public void addDestinatarios(Q70MailUser user) {
		this.listaDestinatarios.add(user);
	}

	/**
	 * @param user
	 */
	public void addDestinatariosCC(Q70MailUser user) {
		this.listaDestinatariosCC.add(user);
	}

	/**
	 * @param user
	 */
	public void addDestinatariosCCO(Q70MailUser user) {
		this.listaDestinatariosCCO.add(user);
	}

	/**
	 * @param file
	 */
	public void addFicheroAdjunto(Q70MailFile file) {
		listaFicherosAdjuntos.add(file);
	}

	/**
	 * @param file
	 */
	public void addFicheroIncrustado(Q70MailFile file) {
		listaFicherosIncrustados.add(file);
	}

	/**
	 * @return destinatarios
	 */
	public ArrayList getAllDestinatarios() {
		return listaDestinatarios;
	}

	/**
	 * @return destinatarios con copia
	 */
	public ArrayList getAllDestinatariosCC() {
		return listaDestinatariosCC;
	}

	/**
	 * @return destinatatarios con copia oculta
	 */
	public ArrayList getAllDestinatariosCCO() {
		return listaDestinatariosCCO;
	}

	/**
	 * @return ficheros adjuntos
	 */
	public ArrayList getAllFicherosAdjuntos() {
		return listaFicherosAdjuntos;
	}

	/**
	 * @return ficheros incrustados
	 */
	public ArrayList getAllFicherosIncrustados() {
		return listaFicherosIncrustados;
	}

	/**
	 * Borrar un destinatario
	 * @param email
	 */
	public void removeDestinatario(String email) {
		borrarDestinatario(listaDestinatarios, email);
	}

	/**
	 * Borrar un destinatario con copia
	 * @param email
	 */
	public void removeDestinatarioCC(String email) {
		borrarDestinatario(listaDestinatariosCC, email);
	}

	/**
	 * Borrar un destinatario con copia oculta
	 * @param email
	 */
	public void removeDestinatarioCCO(String email) {
		borrarDestinatario(listaDestinatariosCCO, email);
	}

	/**
	 * Borrar un fichero adjunto
	 * @param nombreFichero
	 */
	public void removeFicheroAdjunto(String nombreFichero) {
		borrarFichero(listaFicherosAdjuntos, nombreFichero);
	}

	/**
	 * Borrar un fichero incrustado
	 * @param nombreFichero
	 */
	public void removeFicheroIncrustado(String nombreFichero) {
		borrarFichero(listaFicherosIncrustados, nombreFichero);
	}

	/**
	 * Borrar todos los destinatarios
	 */
	public void removeAllDestinatarios() {
		listaDestinatarios.clear();
	}

	/**
	 * Borrar todos los destinatarios con copia
	 */
	public void removeAllDestinatariosCC() {
		listaDestinatariosCC.clear();
	}

	/**
	 * Borrar todos los destinatarios con copia oculta
	 */
	public void removeAllDestinatariosCCO() {
		listaDestinatariosCCO.clear();
	}

	/**
	 * Borrar todos los ficheros adjuntos
	 */
	public void removeAllFicherosAdjuntos() {
		listaFicherosAdjuntos.clear();
	}

	/**
	 * Borrar todos los ficheros incrustados
	 */
	public void removeAllFicherosIncrustados() {
		listaFicherosIncrustados.clear();
	}

	/**
	 * @param lista
	 * @param email
	 */
	private void borrarDestinatario(ArrayList lista, String email) {
		boolean borrado = false;
		int i = 0;

		while (i < lista.size() && !borrado) {
			if (email.trim().equals(((Q70MailUser) listaDestinatarios.get(i)).getDireccionEmail().trim())) {
				lista.remove(i);
				borrado = true;
			}
			i++;
		}
	}

	/**
	 * @param lista
	 * @param nombreFichero
	 */
	private void borrarFichero(ArrayList lista, String nombreFichero) {
		boolean borrado = false;
		int i = 0;

		while (i < lista.size() && !borrado) {
			if (nombreFichero.trim().equals(((Q70MailFile) listaDestinatarios.get(i)).getName().trim())) {
				lista.remove(i);
				borrado = true;
			}
			i++;
		}
	}
}
