#include "libnazgul.h"

// on ajoute en fin de queue...

int msgQueueElemAdd(msgQueue * queue, msgQueueElemId newElemId){
	msgQueueElem * queueOldTailElem;
	msgQueueElem * queueNewTailElem;
	
	// on informe l'element qu'il est le dernier
	queueNewTailElem=msgQueueElemOpen(newElemId);
	if (queueNewTailElem == NULL){
	  NZG_ERROR("msgQueueElemOpen",newElemId);
	  goto ERROR;
	}
	strcpy(queueNewTailElem->next,newElemId);
 	if (msgQueueElemClose(queueNewTailElem)){
	  NZG_ERROR("msgQueueElemClose",newElemId);
	  goto ERROR;
	}	

	/* TODO: verifier si la liste n'est pas vide... */
	/* on informe son prédecesseur qu'il a un suivant */
	queueOldTailElem=msgQueueElemOpen(queue->tailId);
	if (queueOldTailElem == NULL){
	  NZG_ERROR("msgQueueElemOpen",queue->tailId);
	  goto ERROR;
	}
	strcpy(queueOldTailElem->next,newElemId);
	if (msgQueueElemClose(queueOldTailElem)){
	  NZG_ERROR("msgQueueElemClose",queue->tailId);
	  goto ERROR;
	}	
	// on donne a la queue l'id du dernier element
	strcpy(queue->tailId,newElemId);
	
ERROR:
	return -1;
}