<?php
// Calcolo indice reale (step parte da 1)
$idx = ((int)$step) - 1;

if (!isset($sezioni[$idx])) {
    echo "<p>Errore: sezione non trovata.</p>";
    return;
}

$ssezione = $sezioni[$idx];
$titolo = $ssezione['titolo'];
$domande = $ssezione['domande'];

echo "<h2>" . htmlspecialchars($titolo) . "</h2>";


foreach ($domande as $domanda) {
    $idd = $domanda['id'];
    $testo = $domanda['testo'];
    $tipo = $domanda['tipo'];
    $classe = $domanda['classe'] ?? '';
    $note = $domanda['note'] ?? '';
    $note = htmlspecialchars($note);
    $note = str_replace("\n", "<br>", $note);
    $readonly = $domanda['readonly'] ?? '';
    $visibile_per = $domanda['visibile_per'] ?? [];
    $visibile_condizione = $domanda['visibile_condizione'] ?? null;
    $obbligatorio = $domanda['obbligatorio'] ?? false;
    $obbligatorio_condizionale = $domanda['obbligatorio_condizionale'] ?? null;
    $opzioni = $domanda['opzioni'] ?? [];
    $etichette = $domanda['etichette'] ?? $opzioni;
    $valore_default = $domanda['valore_default'] ?? '';
    $valore = $_SESSION['survey'][$id_utente]['srv_'.$idd] ?? $valore_default;
    $event = $domanda['event'] ?? '';
    if($event!="") {
        $event .= "=\"" . $domanda['command'] . "\"";
    }
    $required = $domanda['required'] ?? false;
    $stepField = $domanda['step'] ?? 1;
    $placeholder = $domanda['placeholder'] ?? '';

    // Aggiungi un attributo data-tipo per la visibilità condizionale
    $data_tipo = !empty($visibile_per) ? 'data-tipo="' . implode(' ', $visibile_per) . '"' : '';
    
    // Aggiungi attributi per la visibilità condizionale
    $data_condizione = '';
    $initial_style = '';
    if ($visibile_condizione) {
        $campo_condizione = $visibile_condizione['id'];
        $valore_condizione = $visibile_condizione['valore'];
        $data_condizione = 'data-depends-on="' . $campo_condizione . '" data-depends-value="' . $valore_condizione . '"';
        
        // Controlla se la condizione è già soddisfatta
        $valore_attuale_condizione = $_SESSION['survey'][$id_utente]['srv_'.$campo_condizione] ?? '';
        if ($valore_attuale_condizione !== $valore_condizione) {
            $initial_style = 'style="display: none;"';
        }
    }

    // Aggiungi attributo per campi obbligatori
    $data_obbligatorio = $obbligatorio ? 'data-required="true"' : '';
    
    // Aggiungi attributi per obbligatorietà condizionale
    $data_obbligatorio_cond = '';
    if ($obbligatorio_condizionale) {
        $campo_obb_cond = $obbligatorio_condizionale['id'];
        $valore_obb_cond = $obbligatorio_condizionale['valore'];
        $data_obbligatorio_cond = 'data-required-depends-on="' . $campo_obb_cond . '" data-required-depends-value="' . $valore_obb_cond . '"';
        
        // Controlla se la condizione è già soddisfatta per rendere il campo obbligatorio
        $valore_attuale_obb = $_SESSION['survey'][$id_utente]['srv_'.$campo_obb_cond] ?? '';
        if ($valore_attuale_obb === $valore_obb_cond) {
            $data_obbligatorio = 'data-required="true"';
        }
    }

    // Gestione tipo "nota" (nuovo tipo)
    if ($tipo === 'nota') {
        $contenuto = $domanda['contenuto'] ?? '';
        echo "<div class='fieldcontainer nota-warning' $data_tipo $data_condizione $initial_style>\n";
        echo "<fieldset style='border: 2px solid #ff9800; background-color: #fff3e0; padding: 15px; border-radius: 8px;'>\n";
        echo "<legend style='color: #ff9800; font-weight: bold;'><i class='bi bi-exclamation-triangle-fill'></i> " . htmlspecialchars($testo) . "</legend>\n";
        echo "<p style='margin: 0; color: #e65100;'>" . htmlspecialchars($contenuto) . "</p>\n";
        echo "</fieldset>\n</div>\n\n";
        continue;
    }

    echo "<div class='fieldcontainer' $data_tipo $data_condizione $data_obbligatorio $data_obbligatorio_cond $initial_style>\n";
    echo "<fieldset style='border: none;'>\n";
    echo "<legend>" . htmlspecialchars($testo);
    
    // Aggiungi asterisco rosso se il campo è obbligatorio o condizionalmente obbligatorio
    if ($obbligatorio || $obbligatorio_condizionale) {
        echo " <span class='campo-obbligatorio' style='color: #d32f2f; font-weight: bold;'>*</span>";
    }
    
    echo "</legend>\n";

    if ($tipo === 'group' && isset($domanda['campi'])) {
        // Gestione dei campi raggruppati
        foreach ($domanda['campi'] as $campo) {
            $campo_id = $campo['id'];
            $campo_testo = $campo['testo'];
            $campo_tipo = $campo['tipo'];
            $campo_classe = $campo['classe'] ?? '';
            $campo_valore = $_SESSION['survey'][$id_utente]['srv_'.$campo_id] ?? '';
            $campo_visibile_per = $campo['visibile_per'] ?? [];
            $campo_data_tipo = !empty($campo_visibile_per) ? 'data-tipo="' . implode(' ', $campo_visibile_per) . '"' : '';

            echo "<div class='group-field' $campo_data_tipo>\n";
            echo "<label for=\"srv_$campo_id\">" . htmlspecialchars($campo_testo) . "</label>\n";

            if ($campo_tipo === 'text') {
                echo "<input type=\"text\" name=\"srv_$campo_id\" value=\"" . htmlspecialchars($campo_valore) . "\" style=\"width:100%; padding: 6px;\" class=\"$campo_classe\">";
            }
            // Puoi aggiungere altri tipi di input qui, se necessario

            echo "</div>\n";
        }
    } else {
        // Gestione dei campi non raggruppati
        if($readonly=="readonly") {
            $readonly = "readonly=\"readonly\"";
        } 
        if($required) {
            $classe .= " required";
            $readonly = "";
            $requiredtxt = "required";
        } else {
            $requiredtxt = "";
        }
        if($placeholder != '')  $placeholder = "placeholder=\"" . htmlspecialchars($placeholder) . "\"";

        switch ($tipo) {
            case 'textarea':
                $required_attr = ($obbligatorio || ($obbligatorio_condizionale && $valore_attuale_obb === $valore_obb_cond)) ? 'required' : '';
                echo "<textarea name=\"srv_$idd\" $readonly rows=\"4\" style=\"width:100%;\" class=\"$classe\" $required_attr>" . htmlspecialchars($valore) . "</textarea>";
                break;

            case 'text':
                $required_attr = ($obbligatorio || ($obbligatorio_condizionale && $valore_attuale_obb === $valore_obb_cond)) ? 'required' : '';
                echo "<input type=\"text\" $readonly name=\"srv_$idd\" id=\"srv_$idd\" value=\"" . htmlspecialchars($valore) . "\" style=\"width:100%; padding: 6px;\" class=\"$classe\" $event $required_attr>";
                break;

            case 'number':
                $min = $domanda['min'] ?? "0";
                $stepAttr = $domanda['step'] ?? "1";
                $required_attr = ($obbligatorio || ($obbligatorio_condizionale && $valore_attuale_obb === $valore_obb_cond)) ? 'required' : '';
                echo "<input type=\"number\" $readonly $placeholder min='$min' step='$stepAttr' name=\"srv_$idd\" value=\"" . htmlspecialchars($valore) . "\" style=\"width:100%; padding: 6px;\" class=\"$classe\" $required_attr>";
                break;

            case 'radio':
            case 'checkbox':
                foreach ($opzioni as $index => $opzione) {
                    $etichetta = htmlspecialchars($etichette[$index] ?? $opzione);
                    $checked = ($tipo === 'radio' && $valore === $opzione) ? 'checked' : '';
                    $checked = ($tipo === 'checkbox' && is_array($valore) && in_array($opzione, $valore)) ? 'checked' : $checked;
                    $onchange = '';
                    if ($tipo === 'radio') {
                        $onchange = 'onchange="checkConditionalVisibility(\'' . $idd . '\', this.value)"';
                    }
                    echo "<label style=\"display: block; margin-bottom: 5px;\"><input type=\"$tipo\" name=\"srv_$idd" . ($tipo === 'checkbox' ? "[]" : "") . "\" value=\"" . htmlspecialchars($opzione) . "\" $checked $onchange> $etichetta</label>";
                }
                break;

            case 'select':
                if (isset($domanda['opzioni'])) {
                    echo "<select name=\"srv_$idd\" style=\"width:100%; padding: 6px;\" class=\"$classe\">";
                    foreach ($domanda['opzioni'] as $opzione) {
                        if(!strstr($opzione, "{{")) {
                           
                        $selected = ($valore === $opzione) ? 'selected' : '';
                        echo "<option value=\"" . htmlspecialchars($opzione) . "\" $selected>" . htmlspecialchars($opzione) . "</option>";
                        
                        } else {
                            echo getOpzioniSurvey($opzione,$_idutente, $valore);
                        }
                    }
                    echo "</select>";
                }
                break;
            case 'upload':
                // Ottieni accept se definito
                $accept = $domanda['accept'] ?? '';
                
                if (!empty($opzioni) && count($opzioni) == 2 && in_array('si', $opzioni) && in_array('no', $opzioni)) {
                    // Campo upload con scelta si/no
                    echo "<div style=\"margin-bottom: 10px;\">\n";
                    foreach ($opzioni as $index => $opzione) {
                        $checked = ($valore === $opzione) ? 'checked' : '';
                        $etichetta = htmlspecialchars($etichette[$index] ?? $opzione);
                        echo "<label style=\"display: inline-block; margin-right: 15px;\">";
                        echo "<input type=\"radio\" name=\"srv_{$idd}_choice\" value=\"" . htmlspecialchars($opzione) . "\" $checked onchange=\"toggleUploadSection('$idd', this.value)\">";
                        echo " $etichetta</label>\n";
                    }
                    echo "</div>\n";
                    
                    // Determina se mostrare la sezione upload
                    $upload_style = '';
                    if ($data_obbligatorio) {
                        // Se il campo è obbligatorio, la sezione è sempre visibile
                        $upload_style = '';
                    } else {
                        // Altrimenti mostra solo se valore è 'si'
                        $upload_style = ($valore !== 'si') ? 'style="display: none;"' : '';
                    }
                    echo "<div id=\"upload_section_$idd\" $upload_style>\n";
                } else {
                    echo "<div>\n";
                }
                
                // Costruisci URL con parametro accept se presente
                $accept_param = !empty($accept) ? '&accept=' . urlencode($accept) : '';
                echo "<iframe src=\"?_SRV=frmuploadC&id_item=$id_item&idF=$idd&form=frm1&_dest=anagrafica&_idAnag=$id_anag&MSID=$MSID$accept_param\" style=\"width:100%; height:150px; border:none;\" scrolling=\"no\"></iframe>\n";
                echo "<input type=\"hidden\" name=\"srv_$idd\" value=\"" . htmlspecialchars($valore) . "\">\n";
                
                echo "</div>\n"; // Chiude il div dell'upload section
                break;
        }
    }
    // Mostra le note se presenti
    if (!empty($note)) {
        echo "<div class=\"note\" style=\"margin-top: 5px; font-size: 0.9em; color: #666;\">$note</div>\n";
    }
    if($tipo=="upload"){
                echo "<div class=\"files_container\" id=\"files_container_$idd\" style=\"margin-top: 10px;text-align:left\">\n";
                $sql = "SELECT * FROM itm_items_files WHERE id_item=$id_item AND id_anag=$id_anag AND tipo='$idd'";
                $aFiles=$mydbG->DoSelect($sql);
                foreach($aFiles as $r)
                {
                    $ico = "book.png";
                    $id_file = $r['id'];
                    $nomefile = $r['file'];
                    $baseDir = rtrim($baseDir, "/") . "/";
                    $fullpath = str_replace($baseDir,"",$r['path']);
                    if(!strstr($fullpath, $nomefile)) {
                        $fullpath .= $nomefile;
                    }
                    if(strlen($nomefile)>100) $nomefile = substr($nomefile,0,100)."...";
                    echo "<div style=\"margin: 5px;\" class=\"file_item\">\n";
                    echo "<a href=\"".$fullpath."\" target=\"_blank\">";
                    echo "<img src=\"main/contents/icone/$ico\" class=\"ico24\" />";
                    echo "</a>\n";
                    echo "$nomefile\n";
                    
                    echo "<img src=\"main/contents/icone/cancel.png\" class=\"ico20 fright imgcliccabile\" onclick=\"DeleteFile($id_file);\"/>\n";
                                        
                    echo "</div>\n";

                }
                echo "</div>\n";
    }

    echo "</fieldset>\n</div>\n\n";
}
echo "<div style=\"clear:both;\"></div>\n";
// Pulsante di invio
$etichetta = ($step < count($sezioni)) ? 'Avanti' : 'Invia';
echo "<button type=\"submit\" class=\"button\">$etichetta</button>\n";

echo "<input type=\"hidden\" name=\"nstep\" value=\"".count($sezioni)."\" />\n";

if($step == count($sezioni)) {
   
if (!isset($_SESSION['submit_token'])) {
    $_SESSION['submit_token'] = bin2hex(random_bytes(32));
}
echo "<input type=\"hidden\" name=\"submit_token\" value=\"".$_SESSION['submit_token']."\" />\n";

}

?>

<script>
document.addEventListener('DOMContentLoaded', function () {
    // Trova tutti i campi con data-tipo
    const fields = document.querySelectorAll('[data-tipo]');

    fields.forEach(field => {
        // Trova il nome del campo di controllo (radio/checkbox/select) più vicino precedente
        let parent = field.previousElementSibling;
        let controlName = null;
        while (parent) {
            const inputs = parent.querySelectorAll('input[type="radio"], input[type="checkbox"], select');
            if (inputs.length > 0) {
                controlName = inputs[0].name;
                break;
            }
            parent = parent.previousElementSibling;
        }
        // Fallback: cerca nel documento
        if (!controlName) {
            const inputs = document.querySelectorAll('input[type="radio"], input[type="checkbox"], select');
            if (inputs.length > 0) {
                controlName = inputs[0].name;
            }
        }
        if (!controlName) return; // Se non trovato, salta

        function updateVisibility() {
            // Gestione radio
            const radioChecked = document.querySelector(`input[type="radio"][name="${controlName}"]:checked`);
            // Gestione checkbox
            const checkboxChecked = document.querySelectorAll(`input[type="checkbox"][name="${controlName}"]:checked`);
            // Gestione select
            const select = document.querySelector(`select[name="${controlName}"]`);

            let selectedValues = [];
            if (radioChecked) {
                selectedValues = [radioChecked.value];
            } else if (checkboxChecked.length > 0) {
                selectedValues = Array.from(checkboxChecked).map(cb => cb.value);
            } else if (select) {
                selectedValues = [select.value];
            }

            const types = field.getAttribute('data-tipo').split(' ');
            // Mostra se almeno uno dei valori selezionati è tra quelli richiesti
            const show = types.some(type => selectedValues.includes(type));
            field.style.display = show ? '' : 'none';
        }

        // Event listener su tutti i controlli
        const radios = document.querySelectorAll(`input[type="radio"][name="${controlName}"]`);
        radios.forEach(radio => radio.addEventListener('change', updateVisibility));
        const checkboxes = document.querySelectorAll(`input[type="checkbox"][name="${controlName}"]`);
        checkboxes.forEach(cb => cb.addEventListener('change', updateVisibility));
        const select = document.querySelector(`select[name="${controlName}"]`);
        if (select) select.addEventListener('change', updateVisibility);

        // Inizializza la visibilità
        updateVisibility();
    });
});

function toggleUploadSection(fieldId, value) {
    const uploadSection = document.getElementById('upload_section_' + fieldId);
    const fieldContainer = document.querySelector('input[name="srv_' + fieldId + '_choice"]').closest('.fieldcontainer');
    const isRequired = fieldContainer && fieldContainer.hasAttribute('data-required');
    
    if (uploadSection) {
        // Per campi obbligatori, la sezione upload è sempre visibile
        if (isRequired) {
            uploadSection.style.display = '';
        } else {
            uploadSection.style.display = (value === 'si') ? '' : 'none';
        }
    }
    
    // Controlla le dipendenze condizionali
    checkConditionalVisibility(fieldId, value);
}

function checkConditionalVisibility(changedFieldId, changedValue) {
    // Trova tutti i campi che dipendono dal campo modificato
    const dependentFields = document.querySelectorAll('[data-depends-on="' + changedFieldId + '"]');
    
    dependentFields.forEach(function(field) {
        const expectedValue = field.getAttribute('data-depends-value');
        if (changedValue === expectedValue) {
            field.style.display = '';
        } else {
            field.style.display = 'none';
        }
    });
    
    // Controlla anche i campi con obbligatorietà condizionale
    checkConditionalRequirements();
}

function checkConditionalRequirements() {
    // Trova tutti i campi con obbligatorietà condizionale
    const conditionalFields = document.querySelectorAll('[data-required-depends-on]');
    
    conditionalFields.forEach(function(fieldContainer) {
        const dependsOn = fieldContainer.getAttribute('data-required-depends-on');
        const expectedValue = fieldContainer.getAttribute('data-required-depends-value');
        
        // Trova il valore attuale del campo da cui dipende
        const controlField = document.querySelector('input[name="srv_' + dependsOn + '"]:checked');
        const currentValue = controlField ? controlField.value : '';
        
        // Trova il campo input/textarea all'interno del fieldcontainer
        const inputField = fieldContainer.querySelector('input, textarea, select');
        const legendSpan = fieldContainer.querySelector('.campo-obbligatorio');
        
        if (inputField) {
            if (currentValue === expectedValue) {
                // Rendi il campo obbligatorio
                inputField.setAttribute('required', 'required');
                fieldContainer.setAttribute('data-required', 'true');
                // Mostra l'asterisco se non già presente
                if (!legendSpan) {
                    const legend = fieldContainer.querySelector('legend');
                    if (legend) {
                        legend.innerHTML += " <span class='campo-obbligatorio' style='color: #d32f2f; font-weight: bold;'>*</span>";
                    }
                }
            } else {
                // Rimuovi l'obbligatorietà
                inputField.removeAttribute('required');
                fieldContainer.removeAttribute('data-required');
                // Rimuovi l'asterisco
                if (legendSpan) {
                    legendSpan.remove();
                }
            }
        }
    });
}

function DeleteFile(id_file) {
    if(confirm("Sei sicuro di voler eliminare questo file?")) {
        waitpage();
        document.frm1.azione.value = 'deletefile';
        document.frm1.step.value = <?=$step;?>;
        document.frm1.id_file.value = id_file;
        document.frm1.submit();
    }
}

// Inizializza la visibilità delle sezioni upload all'avvio
document.addEventListener('DOMContentLoaded', function() {
    const uploadChoices = document.querySelectorAll('input[name$="_choice"]:checked');
    uploadChoices.forEach(function(choice) {
        const fieldId = choice.name.replace('srv_', '').replace('_choice', '');
        toggleUploadSection(fieldId, choice.value);
    });
    
    // Inizializza la visibilità condizionale all'avvio
    const radioButtons = document.querySelectorAll('input[type="radio"]:checked');
    radioButtons.forEach(function(radio) {
        const fieldId = radio.name.replace('srv_', '');
        const fieldValue = radio.value;
        checkConditionalVisibility(fieldId, fieldValue);
    });
    
    // Inizializza i requisiti condizionali
    checkConditionalRequirements();
    
    // Aggiungi listener per i campi radio che controllano l'obbligatorietà
    document.querySelectorAll('input[type="radio"]').forEach(function(radio) {
        radio.addEventListener('change', function() {
            checkConditionalRequirements();
        });
    });
});

function Upload(idF){
    waitpage();
    document.frm1.azione.value = 'upload';
    document.frm1.step.value = <?=$step;?>;
    document.frm1.filestype.value = idF;
    document.frm1.submit();
}
</script>
