#ifndef ACTRAIL_DYNAMIC_TLS_POST_PAYLOAD_SLEEP_H
#define ACTRAIL_DYNAMIC_TLS_POST_PAYLOAD_SLEEP_H

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static int actrail_sleep_after_payload(void) {
  const char *raw = getenv("ACTRAIL_DYNAMIC_TLS_POST_PAYLOAD_SLEEP_MS");
  if (raw == NULL || raw[0] == '\0') {
    return 0;
  }
  errno = 0;
  char *end = NULL;
  long millis = strtol(raw, &end, 10);
  if (errno != 0 || end == raw || *end != '\0' || millis < 0) {
    fprintf(stderr,
            "invalid ACTRAIL_DYNAMIC_TLS_POST_PAYLOAD_SLEEP_MS=%s\n",
            raw);
    return 1;
  }
  struct timespec remaining = {
      .tv_sec = millis / 1000,
      .tv_nsec = (millis % 1000) * 1000000L,
  };
  while (remaining.tv_sec != 0 || remaining.tv_nsec != 0) {
    if (nanosleep(&remaining, &remaining) == 0) {
      return 0;
    }
    if (errno != EINTR) {
      perror("nanosleep");
      return 1;
    }
  }
  return 0;
}

#endif