/**
 * Imposta i valori min/max degli input di larghezza e altezza,
 * aggiornando anche il testo di hint sotto agli input.
 *
 * @param {Object} config - Oggetto contenente i range provenienti dall'API.
 * @param {number} config.LarghezzaMin - Valore minimo accettato per la larghezza.
 * @param {number} config.LarghezzaMax - Valore massimo accettato per la larghezza.
 * @param {number} config.AltezzaMin   - Valore minimo accettato per l'altezza.
 * @param {number} config.AltezzaMax   - Valore massimo accettato per l'altezza.
 */
function setSize(config){

    // Imposta i valori min/max come data-attribute sull'input della larghezza
    $('#larghezzaInput')
        .attr('data-min', config.LarghezzaMin)
        .attr('data-max', config.LarghezzaMax);

    // Aggiorna il testo di hint per la larghezza
    $('#larghezzaHint')
        .text(`Inserire valore compreso tra ${config.LarghezzaMin} e ${config.LarghezzaMax} mm`);

    // Imposta i valori min/max come data-attribute sull'input dell'altezza
    $('#altezzaInput')
        .attr('data-min', config.AltezzaMin)
        .attr('data-max', config.AltezzaMax);

    // Aggiorna il testo di hint per l'altezza
    $('#altezzaHint')
        .text(`Inserire valore compreso tra ${config.AltezzaMin} e ${config.AltezzaMax} mm`);
}



/**
 * Imposta i valori min/max degli input di larghezza e altezza,
 * aggiornando anche il testo di hint sotto agli input.
 *
 * @param {number} larghezzaMin - Valore minimo accettato per la larghezza.
 * @param {number} larghezzaMax - Valore massimo accettato per la larghezza.
 * @param {number} altezzaMin   - Valore minimo accettato per l'altezza.
 * @param {number} altezzaMax   - Valore massimo accettato per l'altezza.
 */
function setSize(larghezzaMin, larghezzaMax, altezzaMin, altezzaMax){

    // Aggiorna il testo di hint per la larghezza
    $('#larghezzaHint')
        .text(`Inserire valore compreso tra ${larghezzaMin} e ${larghezzaMax} mm`);

    // Aggiorna il testo di hint per l'altezza
    $('#altezzaHint')
        .text(`Inserire valore compreso tra ${altezzaMin} e ${altezzaMax} mm`);
}

/**
 * Imposta i valori min/max degli input di  altezza,
 * aggiornando anche il testo di hint sotto l'input.
 *
 * @param {number} altezzaMin   - Valore minimo accettato per l'altezza del traverso.
 * @param {number} altezzaMax   - Valore massimo accettato per l'altezza del traverso.
 */
function setSizeAltezzaTraverso(altezzaMin, altezzaMax) {

    $('#altezzaTraversoInput')
        .attr('data-min', altezzaMin)
        .attr('data-max', altezzaMax);

    // Aggiorna il testo di hint per l'altezza
    $('#altezzaTraversoHint')
        .text(`Inserire valore compreso tra ${altezzaMin} e ${altezzaMax} mm`);
}


/**
 * Valida un input dimensionale (larghezza o altezza)
 * leggendo dinamicamente i limiti min/max dagli attributi data-*
 * senza usare jQuery .data(), che memorizza valori in cache.
 *
 * @param {jQuery} $input - L’input da validare come oggetto jQuery.
 */
function validateDimensionInput($input) {

    // Legge il valore inserito dall’utente e lo converte in numero intero
    const value = parseInt($input.val(), 10);

    // ⚠ IMPORTANTE:
    // Usiamo .attr() al posto di .data() perché .data() memorizza il valore
    // la prima volta che lo legge e NON lo aggiorna quando gli attributi cambiano.
    const min = parseInt($input.attr('min'), 10);
    const max = parseInt($input.attr('max'), 10);

    // Se il campo è vuoto non segnaliamo alcun errore.
    // (Comportamento modificabile se vuoi renderlo obbligatorio)
    if (isNaN(value)) {
        $input.removeClass('is-invalid');
        return;
    }

    // Se il valore inserito è fuori range → bordo rosso (is-invalid)
    if (value < min || value > max) {
        $input.addClass('is-invalid');
    }
    // Se il valore è valido → rimuoviamo eventuali errori precedenti
    else {
        $input.removeClass('is-invalid');
    }
}

/**
 * Carica i coprifili interni/esterni in base ai colori selezionati nel configuratore.
 * Usa baseUrl per comporre l'endpoint, disabilita le select durante il caricamento
 * e le popola con i risultati restituiti dal server. In caso di errore mostra un fallback.
 *
 * @param {jQuery} baseUrl - L’url del metodo *GetCoprifiliPerColori*
 */
function loadCoprifiliPerColori(baseUrl) {

    // Recupera il colore principale.
    // Se sei in monocolore usa IdColore, altrimenti usa IdColore1
    const id1 = confObj.IdColore1 || confObj.IdColore;

    // Recupera il secondo colore solo se presente (bicolore)
    const id2 = confObj.IdColore2 || null;

    // Se non c'è almeno un colore valido non chiamare l'API
    if (!id1 && !id2) return;

    // Costruisce l'URL dell'endpoint server-side passando i colori come querystring
    const url = baseUrl
        + '?idColore1=' + encodeURIComponent(id1 ?? '')
        + '&idColore2=' + encodeURIComponent(id2 ?? '');

    // Seleziona le dropdown interno/esterno,
    // le disabilita e mostra una voce "Caricamento..."
    const $int = $('#coprifiloInternoSelect')
        .prop('disabled', true)
        .html('<option>Caricamento…</option>');

    const $ext = $('#coprifiloEsternoSelect')
        .prop('disabled', true)
        .html('<option>Caricamento…</option>');

    // Chiamata AJAX utilizzando la tua get() custom
    get(url, function(resp){

        // Se la risposta non è valida o manca success → mostra messaggio e termina
        if (!resp || !resp.Success) {
            $int.html('<option>Nessun dato</option>');
            $ext.html('<option>Nessun dato</option>');
            return;
        }

        // Funzione helper per trasformare un array di oggetti in HTML <option>
        // arr: [{id:..., text:...}, ...]
        const toOptions = (arr) => (arr || [])
            .map(i => `<option value="${i.Id}">${i.Descrizione}</option>`)
            .join('');

        // Popola la select dei coprifili interni e la riabilita
        $int.html('<option value="">Seleziona…</option>' + toOptions(resp.Data.internoItems))
            .prop('disabled', false);

        // Popola la select dei coprifili esterni e la riabilita
        $ext.html('<option value="">Seleziona…</option>' + toOptions(resp.Data.esternoItems))
            .prop('disabled', false);
    });
}