#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <unistd.h>

// Per compilarlo:

// sudo apt update
// sudo apt-get install libcurl4-openssl-dev

// gcc -o sendtophp sendtophp.c -lcurl

// Funzione per gestire la risposta del server
size_t response_handler(void *ptr, size_t size, size_t nmemb, void *stream) {
    // Converte la risposta in una stringa
    ((char *)ptr)[size * nmemb] = '\0';
    printf("Server response: %s\n", (char *)ptr);
    return size * nmemb;
}

int main(void) {
    CURL *curl;
    CURLcode res;
    int counter = 1; // Inizializza il contatore per l'invio

    // Inizializza la libreria CURL
    curl_global_init(CURL_GLOBAL_ALL);

    // Crea l'oggetto CURL
    curl = curl_easy_init();

    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://erp.acmesystems.it:1880/target.php");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, response_handler);

        // Ciclo per l'invio dei dati
        for(int i = 0; i < 10000; i++) {
            // Prepara i dati POST con il contatore e la stringa "ABCDEF"
            char data[100];
            sprintf(data, "counter=%d&cardid=ABCDEF", counter);

            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
            printf("Sending data attempt %d...\n", counter);

            // Esegue la richiesta POST
            res = curl_easy_perform(curl);

            // Controlla errori
            if(res != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
                break; // Interrompe il ciclo in caso di errore
            }

            // Incrementa il contatore ad ogni invio
            counter++;

            // Attesa per la conferma prima del prossimo invio
            printf("Waiting for server confirmation...\n");
            sleep(1); // Aspetta 1 secondo prima del prossimo invio
        }

        // Pulizia
        curl_easy_cleanup(curl);
    }

    // Pulisce le risorse globali di CURL
    curl_global_cleanup();

    return 0;
}
