<?
echo " <!-- surveys.php -->";


if(!isset($isubsezione)) $isubsezione = 0;
if(!isset($id)) {
    $id = 0;
    $isubsezione = 0;
}
if(!isset($step) || !is_numeric($step)) $step = 0;

if($logged==1) {

    $id_utente = $_idutente;

} else {

    // FASE 1: utente non loggato non può accedere alla survey
    // Il ramo guest (t_utenti_temp / surveyreg.inc.php) è disabilitato.
    echo '<div class="box_in rounded"><div class="titolo">Accesso riservato</div>';
    echo '<div class="spessore"></div>';
    echo '<div class="testo">Per compilare la survey è necessario effettuare il login o registrarsi.</div>';
    echo '<div class="spessore"></div>';
    echo '<div class="button" onclick="location.href=\'?sz=home\'"><div>Vai al Login</div></div></div>';
    return; // Esce dal file, non prosegue con il resto della survey
}

if($_DEBUG) echo " <!-- $_idutente) $sezione $isubsezione |$step| $id -->\n";

if(isset($id_item) && $id_item > 0 && $azione == "delete") {
        // Permetti eliminazione solo se non ancora elaborata
        $sql = "SELECT data_elab FROM survey_items WHERE id = $id_item AND id_utente = $id_utente";
        $mydb->DoSelect($sql);
        $rdel = $mydb->GetRow();
        $can_delete = false;
        if ($rdel) {
            $data_elab = $rdel['data_elab'];
            $can_delete = ($data_elab == "0000-00-00 00:00:00" || $data_elab == "" || $data_elab === null);
        }

        if ($can_delete) {
            // Elimina la survey e tutti i dati associati
            $sql = "DELETE FROM survey_items WHERE id = $id_item AND id_utente = $id_utente";
            $mydb->ExecSql($sql);
            
            $sql = "DELETE FROM survey_items_data WHERE id_survey_item = $id_item AND id_utente = $id_utente";
            $mydb->ExecSql($sql);

            echo "<div>Survey eliminata con successo.</div>";
        } else {
            echo "<div>Survey chiusa: eliminazione non consentita.</div>";
        }
        
        #echo "<script>alert('Survey eliminata con successo.');</script>";
        #echo "<script>location.href='?sz=surveys,0';</script>";
        #exit;
}

?>
<div class="box_in rounded">

<form name="frm1" id="frm1" method="post" action="<? echo $action ?>" >

<?php
if($isubsezione==0)
{
?>

<div class="titolo_big">Nuova Survey</div>
<div class="spessore"></div>
<div class="testo">Trovi l'elenco delle tue survey in Dashboard.</div>
<div class="spessore"></div>
<div class="button buttonred" onclick="newSurvey()"><div>+ Nuova Survey</div></div>

<? } elseif($isubsezione==2) {
    // SELEZIONE TEMPLATE - Mostra le survey disponibili da cui l'utente può scegliere
    $sql = "SELECT id, descrizione FROM surveys WHERE id_categoria=1 ORDER BY descrizione ASC";
    $aTemplates = $mydb->DoSelect($sql);
?>
<div class="rbutton2" onclick="surveyhome();"><div>Indietro</div></div>
<div class="spessore"></div>
<div class="titolo_big">Seleziona una Survey</div>
<div class="spessore"></div>

<?php if(is_array($aTemplates) && count($aTemplates) > 0) { ?>
    <table class="tablegrid tablegrid3">
        <tr>
            <th>Template Survey</th>
            <th>Azione</th>
        </tr>
        <?php foreach($aTemplates as $template) { ?>
        <tr>
            <td><?=mydecodeTxt($template['descrizione'])?></td>
            <td>
                <img src="main/contents/icone/edit-icon.png" class="ico20 imgcliccabile" onclick="startNewSurvey(<?=$template['id']?>)" title="Inizia questa survey" />
            </td>
        </tr>
        <?php } ?>
    </table>
    <div class="spessore"></div>
    <div class="spessore"></div>
<?php } else { ?>
    <p>Nessuna survey disponibile al momento.</p>
<?php } ?>

<script>
function startNewSurvey(survey_id)
{
    waitpage();
    document.frm1.id.value = survey_id;
    document.frm1.id_item.value = 0;
    document.frm1.sz.value = "surveys,1";
    document.frm1.step.value = 1;
    document.frm1.submit();
}
</script>

<? } elseif($isubsezione==1) {

    // Se stiamo iniziando una nuova survey (id_item=0 dal POST), resettiamo la sessione
    if(isset($_POST['id_item']) && $_POST['id_item'] == 0) {
        unset($_SESSION['id_item']);
        // Resetta anche i dati della survey in sessione per evitare contaminazioni
        if(isset($id_utente) && $id_utente > 0) {
            $_SESSION['survey'][$id_utente] = [];
        }
    }

    if(isset($id_item) && $id_item > 0 && $id == 0) {
        // Recupera l'id della survey associata all'item
        $sql = "SELECT id_survey FROM survey_items WHERE id = $id_item AND id_utente = $id_utente";
        $mydb->DoSelect($sql);
        if($r = $mydb->GetRow()) {
            $id = $r['id_survey'];
        } else {
            echo "<h1>Survey non trovata</h1>";
            exit;
        }
    }

    $sql = "SELECT * FROM surveys WHERE id='$id'";
    $surveyRows = $mydb->DoSelect($sql);
    if(is_array($surveyRows) && count($surveyRows) > 0) {
        $survey = $surveyRows[0];
        if(isset($survey['id']) && $survey['id']>0) {
            $descrizione = mydecodeTxt($survey['descrizione']);
            ##$action = "?sz=surveys,1&id=$id";
        } else {
            echo "<h1>Survey non trovata</h1>";
            exit;
        }
    } else {
        echo "<h1>Survey non trovata</h1>";
        exit;
    }

    // Caricamento file JSON
    $survey = json_decode(file_get_contents('userdata/survey_template_' . $id . '.json'), true);
    $sezioni = $survey['sezioni'] ?? [];

    $nstep = count($sezioni);

    if(!isset($step)) $step = 0;

if($logged==1) {

    $id_utente = $_idutente;

    // NUOVO: Se id_item è valorizzato, significa che l'utente sta riaprendo una survey esistente
    if(isset($id_item) && $id_item > 0 && isset($_POST['reloadSurvey']) && $_POST['reloadSurvey'] == 1) {
        // Recupera i dati salvati della survey
        $sql = "SELECT si.id_survey FROM survey_items si WHERE si.id = $id_item AND si.id_utente = $id_utente";
        $mydb->DoSelect($sql);
        if($r = $mydb->GetRow()) {
            $id = $r['id_survey']; // Ripristina l'id della survey dal database
            
            // Ripopola la sessione con i dati precedentemente salvati
            $sql = "SELECT field_name, field_value FROM survey_items_data WHERE id_survey_item = $id_item";
            $aData = $mydb->DoSelect($sql);
            if(is_array($aData)) {
                if (!isset($_SESSION['survey'][$id_utente])) {
                    $_SESSION['survey'][$id_utente] = [];
                }
                foreach($aData as $data_row) {
                    $field_name = mydecodeTxt($data_row['field_name']);#'srv_' . 
                    $field_value = mydecodeTxt($data_row['field_value']);
                    // Se è un JSON (array salvato), decodificalo
                    $decoded = json_decode($field_value, true);
                    $_SESSION['survey'][$id_utente][$field_name] = ($decoded !== null) ? $decoded : $field_value;
                }
            }
        }
        if($step==0) $step=1;// salto lo step 0 per utenti loggati che riaprono
    } else {
        if($step==0) $step=1;// salto lo step 0 per utenti loggati
    }
}
else 
{
    // Utente non loggato
    $id_utente = 0;
    
    // Se è step 0 e ho ricevuto i dati del form di registrazione
    if(isset($_POST['srv_email']) && !empty($_POST['srv_email'])) {
        $email_check = myencodeTxt($_POST['srv_email']);
        
        // Verifico se l'email esiste già
        $sql = "SELECT * FROM t_utenti_temp WHERE email='$email_check'";
        $mydb->DoSelect($sql);
        
        if($r = $mydb->GetRow()) {
            // Email esistente, uso quell'utente
            $id_utente = $r['id_utenti'];
            
            // Aggiorno i dati dell'utente se necessario
            $nome = myencodeTxt($_POST['srv_nome']);
            $cognome = myencodeTxt($_POST['srv_cognome']);
            $azienda = isset($_POST['srv_azienda']) ? myencodeTxt($_POST['srv_azienda']) : '';
            $ruolo = isset($_POST['srv_ruolo']) ? myencodeTxt($_POST['srv_ruolo']) : '';
            
            $sql = "UPDATE t_utenti_temp SET nome='$nome', cognome='$cognome', username='$MSID'";
            if(!empty($azienda)) $sql .= ", azienda='$azienda'";
            if(!empty($ruolo)) $sql .= ", ruolo='$ruolo'";
            $sql .= " WHERE id_utenti=$id_utente";
            $mydb->ExecSql($sql);
            
        } else {
            // Email nuova, creo un nuovo utente
            $nome = myencodeTxt($_POST['srv_nome']);
            $cognome = myencodeTxt($_POST['srv_cognome']);
            $azienda = isset($_POST['srv_azienda']) ? myencodeTxt($_POST['srv_azienda']) : '';
            $ruolo = isset($_POST['srv_ruolo']) ? myencodeTxt($_POST['srv_ruolo']) : '';
            
            $sql = "INSERT INTO t_utenti_temp (username, email, nome, cognome, azienda, ruolo, data_ins) VALUES ('$MSID', '$email_check', '$nome', '$cognome', '$azienda', '$ruolo', NOW())";
            $mydb->ExecSql($sql);
            $id_utente = $mydb->LastInsertedId;
        }
    } else {
        // Controllo se esiste già un utente con questo MSID
        $sql = "SELECT * FROM t_utenti_temp WHERE username='$MSID'";
        $mydb->DoSelect($sql);
        if($r = $mydb->GetRow()) {
            $id_utente = $r['id_utenti'];
        }
    }
}

if($step==0 || 1)
{
    // Creo o recupero l'item del survey solo se ho un id_utente valido
    if($id_utente > 0) {
        if(isset($_SESSION['id_item'])) {
            $id_item = $_SESSION['id_item'];
            $sql = "SELECT * FROM survey_items WHERE id = $id_item AND id_survey = $id";
            $mydb->DoSelect($sql);
            if ($r = $mydb->GetRow()) {
                $id_item = $r['id'];
            } else {
                // Se l'item non esiste, lo creo
                $sql = "INSERT INTO survey_items (id_survey, id_utente, data_ins) VALUES ($id, $id_utente, NOW())";
                $mydb->ExecSql($sql);  
                $id_item = $mydb->LastInsertedId;
                $_SESSION['id_item'] = $id_item; // Salva l'ID dell'item nella sessione
            }
        } else {
            $sql = "INSERT INTO survey_items (id_survey, id_utente, data_ins) VALUES ($id, $id_utente, NOW())";
            $mydb->ExecSql($sql);  
            $id_item = $mydb->LastInsertedId;
            $_SESSION['id_item'] = $id_item; // Salva l'ID dell'item nella sessione
        }
    } else {
        $id_item = 0; // Nessun item fino a quando l'utente non si registra
    }
}

$stepto = (int)$step + 1;

$resetSurvey = 0;
if(isset($_POST['resetSurvey'])) {
    $resetSurvey = $_POST['resetSurvey'];
    $_POST['resetSurvey'] = null; // Pulisci il valore per evitare conflitti futuri
    unset($_POST['resetSurvey']);
    $_SESSION['survey'][$id_utente] = []; // Resetta i dati del sondaggio
}

// Inizializza i dati se non esistono
if (!isset($_SESSION['survey'][$id_utente])) {
    $_SESSION['survey'][$id_utente] = [];
}

// Salva i dati inviati
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    foreach ($_POST as $key => $value) {
        if(strstr($key, "srv_")) {
            #$key = str_replace("srv_", "", $key); // Rimuovi il prefisso "srv_"
            if (is_array($value)) {
                // Gestisci il caso in cui $value è un array
                $_SESSION['survey'][$id_utente][$key] = array_map('strval', $value);
            } elseif (!is_null($value)) {
                // Gestisci il caso in cui $value è una stringa non nulla
                $_SESSION['survey'][$id_utente][$key] = $value;
            }
        }
    }
    }
/*
echo "<pre>";
var_dump($_SESSION['survey'][$id_utente]);
echo "</pre>";
*/
// Funzione helper per precompilare
function old($field) {
    global $id_utente;
    return $_SESSION['survey'][$id_utente][$field] ?? '';
}

#if(!isset($nstep)) $nstep = 1;

if($step<=1){
?>
<div class="rbutton2" onclick="surveyhome()"><div>Indietro</div></div>
<div class="spessore"></div>
<?} elseif($step>1){ ?>
<div class="rbutton2" onclick="back()"><div>Indietro</div></div>
<div class="spessore"></div>
<?}?>
<div class="spessore"></div>
<h1><?=$descrizione?></h1>
<div class="spessore"></div>
<div class="spessore"></div>


<?
#echo $step . " / $nstep<br>";
if($step==0) {
    //registrazione utente
    include "./main/contents/surveyreg.inc.php";
 }
elseif($step<=$nstep)
{
    /*
    if($step==1) {
        // I dati dell'utente sono già stati salvati nello step 0
        // Questo update è superfluo, ma lo lascio per retrocompatibilità
        if(isset($_SESSION['survey'][$id_utente]['srv_nome']) && 
           isset($_SESSION['survey'][$id_utente]['srv_cognome']) && 
           isset($_SESSION['survey'][$id_utente]['srv_email'])) {
            
            $nome = myencodeTxt($_SESSION['survey'][$id_utente]['srv_nome']);
            $cognome = myencodeTxt($_SESSION['survey'][$id_utente]['srv_cognome']);
            $email = myencodeTxt($_SESSION['survey'][$id_utente]['srv_email']);

            $sql = "UPDATE t_utenti_temp SET nome='$nome', cognome='$cognome',email='$email' WHERE id_utenti=$id_utente";
            $mydb->ExecSql($sql);
        }
    }
    */
    include "./main/contents/survey.inc.php";

} elseif($step==$nstep+1) {

if($_DEBUG) echo "Save: qui step = " . $step . " nstep=" . $nstep;

    //salvataggio dati della survey prima di passare al business case
    if(isset($_SESSION['survey'][$id_utente]) && is_array($_SESSION['survey'][$id_utente]) && $id_item > 0) {
        $mydb->setCharset($charset="utf8mb4");
        
        // Prima elimino eventuali dati precedenti per questo item
        $sql = "DELETE FROM survey_items_data WHERE id_survey_item='$id_item' AND id_utente='$id_utente'";
        $mydb->ExecSql($sql);
        
        // Poi inserisco tutti i campi dalla sessione
        foreach($_SESSION['survey'][$id_utente] as $field_name => $field_value) {
            // Salta i campi factor[] che sono gestiti diversamente
            if(strpos($field_name, 'factor[') === 0) continue;
            
            // Gestisci array (checkbox multipli)
            if(is_array($field_value)) {
                $field_value = json_encode($field_value);
            }
            
            $field_name_enc = myencodeTxt($field_name);
            $field_value_enc = myencodeTxt($field_value);
            
            $sql = "INSERT INTO survey_items_data (id_survey_item, id_utente, field_name, field_value, data_ins) 
                    VALUES ('$id_item', '$id_utente', '$field_name_enc', '$field_value_enc', NOW())";
            $mydb->ExecSql($sql);#echo $sql."<br>";
        }
    }

    include "./main/contents/save_business_case.php";

} elseif($step==$nstep+2) {

if($_DEBUG) echo "Elabora: qui step = " . $step . " nstep=" . $nstep;

    include "./main/contents/elabora_business_case.php";

}

else {
    //fine survey
    include "./main/contents/surveyend.inc.php";
}
?>


<script>

function back()
{
    var step = document.frm1.step.value;
    step = step-2;
    //if(step<1) step=1;
    document.frm1.step.value = step;
    waitpage();
    document.frm1.azione.value = "";
    document.frm1.submit();
}
</script>
<? } elseif($isubsezione==3) { ?>

<?php
// Vista risultati Business Case (stessa struttura di elabora_business_case)
include "./main/contents/elabora_business_case.php";
?>

<? } ?>
        <input type="hidden" name="MSID" value="<?=$MSID?>" />
        <input type="hidden" name="sz" value="<?=$sezione?>" />
        <input type="hidden" name="azione" value="" />
        <input type="hidden" name="id" value="<?=$id?>" />
        <input type="hidden" name="id_utente" value="<?=$id_utente?>" />
        <input type="hidden" name="id_item" value="<?=$id_item ?? ''?>" />
        <input type="hidden" name="step" value="<?=$stepto  ?? ''?>" />
        <input type="hidden" name="tab" value="<?=$tab ?? ''?>" />
        <input type="hidden" name="tab2" value="<?=$tab2 ?? ''?>" />  
        <input type="hidden" name="reloadSurvey" value="0" />   

</form>

</div>

<script>

function newSurvey()
{
    
    waitpage();
    document.frm1.azione.value = "";
    document.frm1.id.value = 0;
    document.frm1.sz.value = "surveys,2";
    document.frm1.submit();
}
function surveyhome()
{
    
    waitpage();
    document.frm1.azione.value = "";
    document.frm1.id.value = 0;
    document.frm1.sz.value = "dashboard";
    document.frm1.submit();
}
</script>

