<?php
// elabora_business_case.php
// Mostra i fattori del Business Case compilati dall'utente (solo valori presenti)

// Prerequisiti variabili dall'ambiente chiamante (surveys.php):
// - $id_item: id dell'item del survey (survey_items.id)
// - $mydb: handler DB con metodi DoSelect/GetRow/ExecSql

if (!isset($id_item) || intval($id_item) <= 0) {
    echo '<h1>Nessun dato da elaborare</h1>';
    return;
}
$bc_admin_readonly = $bc_admin_readonly ?? false;
// Helper per normalizzare unità in visualizzazione
function bc_format_unit($unit) {
    if ($unit === null) return '';
    $u = str_replace('?', '/', $unit);
    if (strpos($u, '%') !== false) return '%';
    if (strpos($u, '€') !== false) return '€';
    return $u;
}

// Helper per normalizzare valori qualitativi su scala 1-5
function bc_normalize_qualitative($value, $unit) {
    if (!is_numeric($value)) return null;
    $val = floatval($value);
    
    // Se è già in scala 1-5, restituisci direttamente
    if (stripos($unit, 'Scala') !== false) {
        return $val; // Già normalizzato (1-5)
    }
    
    // Se è percentuale (0-100), converti in scala 1-5
    if (stripos($unit, '%') !== false) {
        // 0% = 1, 100% = 5
        // Formula: 1 + (val / 100) * 4
        return 1 + ($val / 100.0) * 4.0;
    }
    
    return $val;
}
/*
// Helper per determinare se un factor è qualitativo (non monetario)
function bc_is_qualitative($unit) {
    if ($unit === null) return false;
    $u = strtolower((string)$unit);
    // Qualitativo se contiene 'scala' o se è percentuale ma NON euro
    if (stripos($u, 'scala') !== false) return true;
    if (stripos($u, '%') !== false && stripos($u, '€') === false) return true;
    return false;
}
*/
// Helper per formattare valore per unità (minima formattazione non invasiva)
function bc_format_value($value_raw, $unit) {
    if ($value_raw === null || $value_raw === '') return '';
    
    if (!is_numeric($value_raw)) {
        return htmlspecialchars((string)$value_raw, ENT_QUOTES, 'UTF-8');
    }
    
    $num = (float)$value_raw;
    
    // Se l'unità contiene il simbolo €, formatta con separatori migliaia e decimali
    if (strpos($unit, '€') !== false) {
        // Formato italiano: punto per migliaia, virgola per decimali
        return number_format($num, 2, ',', '.');
    }
    
    // Se l'unità contiene %, formatta come intero se .00, altrimenti con decimali e virgola
    if (strpos($unit, '%') !== false) {
        // Verifica se ha decimali significativi
        if ($num == intval($num)) {
            return number_format($num, 0, ',', '.');
        } else {
            return str_replace('.', ',', rtrim(rtrim(sprintf('%.2f', $num), '0'), '.'));
        }
    }
    
    return htmlspecialchars((string)$value_raw, ENT_QUOTES, 'UTF-8');
}

// Valuta una semplice formula (espressione PHP) con variabili consentite
function bc_eval_formula($expr, $vars) {
    if ($expr === null || $expr === '') return null;
    #echo $expr."<br>\n";
    #echo "<pre>";print_r($vars);echo "</pre>";
    // Consenti solo espressioni, non istruzioni con ';' multiple
    // Le formule archiviate sono espressioni tipo "$trial*$val_att*$costo_personale_annuo/100"
    foreach (['$',';','<?','?>'] as $bad) {
        // tolleriamo il prefisso '$' su variabili, quindi non lo blocchiamo
        if ($bad !== '$' && strpos($expr, $bad) !== false) {
            // fallback: pulizia semplice, rimuove tag
            $expr = str_replace(['<?','?>'], '', $expr);
            break;
        }
    }
    // Estrae variabili nel contesto locale
    if (is_array($vars)) {
        extract($vars, EXTR_SKIP);
    }
    try {
        // eval come ritorno di espressione
        // Nota: si presume input trusted (DB controllato)
        return eval('return ' . $expr . ';');
    } catch (Throwable $e) {
        return null;
    }
}

// Recupera fattori attivi con eventuali valori dell'utente per una tabella (quantitative/qualitative)
function bc_get_compiled_rows($mydb, $id_item, $tableKind) {
    $rows = [];
    $mydb->setCharset($charset="utf8mb4");
    // Preleviamo tutti i fattori attivi del tipo richiesto e il valore dell'utente (se presente)
    $sql = "SELECT f.id, f.label, f.input_type, f.unit, f.help_text, f.direct, v.value_raw\n"
         . "FROM business_case_factors f\n"
         . "LEFT JOIN srv_business_case_values v\n"
         . "  ON v.factor_id = f.id AND v.id_survey_item = '" . intval($id_item) . "'\n"
         . "WHERE f.is_active = 1 AND f.`table` = '" . addslashes($tableKind) . "'\n"
         . "ORDER BY f.sort_order";
    $stmt = $mydb->DoSelect($sql);

    foreach ($stmt as $r) {
        $value_raw = $r['value_raw'];
        $type = strtolower((string)$r['input_type']);
        $hasValue = false;

        // Regole di visibilità:
        // - input numerici/text: mostra se value_raw != '-1' (0 è accettato come compilato)
        // - select/scale: mostra se value_raw > 0
        if (in_array($type, ['select', 'scala', 'scale', 'scale5', 'radio'])) {
            $hasValue = (is_numeric($value_raw) && intval($value_raw) > 0);
        } else {
            $hasValue = ($value_raw !== null && $value_raw !== '' && $value_raw !== '-1.00');
        }
        // Salva il valore numerico originale prima delle conversioni
        $value_raw_numeric = $value_raw;
        
        // se è una select, unit viene posta a null per evitare confusione
        //il valore viene convertito in intero e nel numero equivalente di '+' es 3 -> '+++'
        if (in_array($type, ['select', 'scala', 'scale', 'scale5', 'radio'])) {
            $r['unit'] = null;
            $value_raw = intval($value_raw);
            if ($value_raw > 0) {
                $value_raw = str_repeat('+', $value_raw);
            } else {
                $value_raw = '';
            }
        }

        if ($hasValue) {
            // Prepara variabili economiche
            global $economicData, $costo_personale_annuo;
            $dipendenti = isset($economicData['srv_numero_dipendenti']) ? floatval($economicData['srv_numero_dipendenti']) : 0.0;
            $fatturato_annuo = isset($economicData['srv_fatturato_annuo']) ? floatval($economicData['srv_fatturato_annuo']) : 0.0;
            $costo_annuo_per_dip = ($dipendenti > 0 && $costo_personale_annuo > 0) ? ($costo_personale_annuo / $dipendenti) : 0.0;

            // Valore attuale numerico (prima di conversioni per select/scala)
            $val_att_num = null;
            $is_qualitative_type = ($tableKind === 'qualitative');
            
            if (in_array($type, ['select', 'scala', 'scale', 'scale5', 'radio'])) {
                // Per campi scala, usa il valore numerico originale
                $val_att_num = is_numeric($value_raw_numeric) ? floatval($value_raw_numeric) : null;
                // I campi scala sono già su scala 1-5, non serve normalizzazione
            } else {
                $val_att_num = is_numeric($r['value_raw']) ? floatval($r['value_raw']) : null;
                $unit_factor = isset($r['unit']) ? (string)$r['unit'] : '';
                
                if ($val_att_num !== null) {
                    if ($is_qualitative_type) {
                        // Per qualitativi, normalizza su scala 1-5
                        $val_att_num = bc_normalize_qualitative($val_att_num, $unit_factor);
                    } else {
                        // Per quantitativi, normalizza percentuali in frazione
                        if (strpos($unit_factor, '%') !== false) {
                            $val_att_num = $val_att_num / 100.0;
                        }
                    }
                }
            }

            // Carica trial e formule per il fattore
            $fid = intval($r['id']);
            $trial = 0.0; $valorelost_trial = 0.0;
            $formula_code = null; $formula_lost = null;

            // Trial
            $sqlT = "SELECT valore_trial, valorelost_trial, unit FROM business_case_trials WHERE factor_id='".$fid."' LIMIT 1";
            $stmtT = $mydb->DoSelect($sqlT);
            $trial_is_percentage = false;
            foreach ($stmtT as $t) {
                $trial = isset($t['valore_trial']) ? floatval($t['valore_trial']) : 0.0;
                $valorelost_trial = isset($t['valorelost_trial']) ? floatval($t['valorelost_trial']) : 0.0;
                $unit_trial = isset($t['unit']) ? (string)$t['unit'] : '';
                // Normalizza: se unità è percentuale, i valori sono in % e vanno convertiti in frazione
                if (strpos($unit_trial, '%') !== false) {
                    $trial_is_percentage = true;
                    if ($trial !== 0.0) $trial = $trial / 100.0;
                    if ($valorelost_trial !== 0.0) $valorelost_trial = $valorelost_trial / 100.0;
                }
                break;
            }

            // Formulae
            $sqlF = "SELECT formula_code, formula_lost FROM business_case_formulae WHERE factor_id='".$fid."' LIMIT 1";
            $stmtF = $mydb->DoSelect($sqlF);
            foreach ($stmtF as $f) {
                $formula_code = $f['formula_code'];
                $formula_lost = $f['formula_lost'];
                break;
            }

            // Calcola prima Valore perso, poi Potenziale beneficio (alcune formule lo richiedono)
            $lost_val = null; $benefit_val = null;
            $vars = [
                'val_att' => $val_att_num,
                'val_post' => null,
                'trial' => $trial,
                'valorelost_trial' => $valorelost_trial,
                'dipendenti' => $dipendenti,
                'costo_personale_annuo' => $costo_personale_annuo,
                'costo_annuo_per_dip' => $costo_annuo_per_dip,
                'fatturato_annuo' => $fatturato_annuo,
                'ricavi_annui' => $fatturato_annuo,
            ];

            if ($val_att_num !== null) {
                if ($is_qualitative_type) {
                    // Per qualitativi: lost e benefit sono i valori normalizzati (scala 1-5)
                    $lost_val = $val_att_num; // Valore attuale normalizzato
                    
                    // Benefit: se esiste formula usa quella, altrimenti usa trial
                    if (!empty($formula_code)) {
                        $vars['lost'] = $lost_val;
                        $benefit_val = bc_eval_formula($formula_code, $vars);
                    } elseif ($trial > 0) {
                        // Trial per qualitativi è sempre un target assoluto (scala 1-5)
                        if(strstr($unit_trial, '%')) {
                            $trial = 1 + ($trial * 4); // Converti da % a scala 1-5
                        } else {
                            $benefit_val = $trial - $val_att_num; // Gap verso target
                            if ($benefit_val < 0) $benefit_val = 0; // Se già sopra target, benefit=0
                        }
                        
                    } else {
                        $benefit_val = 5.0 - $val_att_num; // Massimo potenziale
                    }
                } else {
                    // Per quantitativi: calcoli in euro
                    if (!empty($formula_lost)) {
                        $lost_val = bc_eval_formula($formula_lost, $vars);
                    } elseif ($valorelost_trial > 0) {
                        $lost_val = $val_att_num * $costo_personale_annuo * $valorelost_trial / 100.0;
                    }
                    $vars['lost'] = $lost_val;
                    
                    // Benefit: se esiste formula usa quella, altrimenti applica trial
                    if (!empty($formula_code)) {
                        $benefit_val = bc_eval_formula($formula_code, $vars);
                    } elseif ($trial > 0) {
                        // Senza formula: trial può essere % di miglioramento o valore assoluto
                        if ($trial_is_percentage) {
                            // Trial in %: calcola miglioramento percentuale del valore attuale
                            $benefit_val = $val_att_num * $trial;
                        } else {
                            // Trial assoluto in euro
                            $benefit_val = $trial;
                        }
                    }
                }
            }

            $rows[] = [
                'factor_id' => $fid,
                'label' => $r['label'],
                'unit' => $r['unit'],
                'value_raw' => $value_raw,
                'help_text' => $r['help_text'],
                'lost_value' => $lost_val,
                'benefit_value' => $benefit_val,
                'direct' => $r['direct']
            ];
        }
    }

    return $rows;
}

// Recupera dati economici da survey_items_data (necessari per i calcoli)
$economicData = [];
$mydb->setCharset($charset="utf8mb4");
$sql = "SELECT field_name, field_value FROM survey_items_data WHERE id_survey_item='$id_item' 
        AND field_name IN ('srv_fatturato_annuo', 'srv_numero_dipendenti', 'srv_costo_personale_annuo', 'srv_utile_annuo')";
$stmt = $mydb->DoSelect($sql);
foreach ($stmt as $r) {
    $economicData[$r['field_name']] = mydecodeTxt($r['field_value']);
}

$costo_personale_annuo = isset($economicData['srv_costo_personale_annuo']) ? floatval($economicData['srv_costo_personale_annuo']) : 0.0;

// Ora possiamo calcolare le righe con le formule
$quantRows = bc_get_compiled_rows($mydb, $id_item, 'quantitative');
$qualRows  = bc_get_compiled_rows($mydb, $id_item, 'qualitative');

// Titolo pagina
echo '<div class="titolo_big">SmartLeak Scanner - Riepilogo</div>';
echo '<div class="spessore"></div>';
echo '<div class="spessore"></div>';

// Tabella Dati Economici
if (!empty($economicData)) {
    echo '<div class="titolo">Dati Economici</div>';
    echo '<div class="spessore"></div>';
    echo '<table class="table tablegrid3" style="margin-left:auto; margin-right:auto; width:90%;">';
    echo '<thead><tr><th>Dato</th><th>Valore</th></tr></thead><tbody>';
    
    $economicLabels = [
        'srv_fatturato_annuo' => 'Fatturato annuo',
        'srv_numero_dipendenti' => 'Numero dipendenti',
        'srv_costo_personale_annuo' => 'Costo del personale annuo',
        'srv_utile_annuo' => 'Utile annuo'
    ];
    
    foreach ($economicLabels as $field => $label) {
        if (isset($economicData[$field]) && $economicData[$field] !== '') {
            $value = $economicData[$field];
            // Formatta come euro, tranne numero_dipendenti che è un intero
            if ($field === 'srv_numero_dipendenti') {
                $formatted = number_format(floatval($value), 0, ',', '.');
            } else {
                $formatted = number_format(floatval($value), 2, ',', '.');
            }
            
            echo '<tr>';
            echo '<td>' . htmlspecialchars($label, ENT_QUOTES, 'UTF-8') . '</td>';
            echo '<td>' . $formatted . ($field !== 'srv_numero_dipendenti' ? ' €' : '') . '</td>';
            echo '</tr>';
        }
    }
    
    echo '</tbody></table>';
    echo '<div class="spessore"></div><div class="spessore"></div>';
}

// Render tabella helper
function bc_render_table($title, $rows, $tableType = 'quantitative') {
    if (!is_array($rows)) $rows = [];
    $isQualitative = ($tableType === 'qualitative');
    
    // Pre-processing: identifica i primi 8 factors "direct" con benefit più alto
    $directRows = [];
    foreach ($rows as $row) {
        if ($row['direct'] == '1' && isset($row['benefit_value']) && is_numeric($row['benefit_value'])) {
            $directRows[] = [
                'factor_id' => $row['factor_id'],
                'benefit_value' => floatval($row['benefit_value'])
            ];
        }
    }
    
    // Ordina per benefit decrescente
    usort($directRows, function($a, $b) {
        return $b['benefit_value'] <=> $a['benefit_value'];
    });
    
    // Prendi solo i primi 8 factor_id
    $top8DirectIds = array_slice(array_column($directRows, 'factor_id'), 0, 8);
    
    echo '<div class="titolo">' . htmlspecialchars($title, ENT_QUOTES, 'UTF-8') . '</div>';
    echo '<div class="spessore"></div>';
    echo '<table class="table tablegrid3 bc-table" style="margin-left:auto; margin-right:auto; width:90%;" data-id-item="' . intval($GLOBALS['id_item']) . '" data-table-type="' . htmlspecialchars($tableType, ENT_QUOTES, 'UTF-8') . '">';
    echo '<thead><tr>';
    echo '<th><input type="checkbox" class="bc-select-all" checked onclick="toggleAll(this)" /></th>';
    echo '<th>Fattore</th><th>Valore in input</th>';
    if ($isQualitative) {
        echo '<th class="th-loss">Valore attuale (scala 1-5)</th>';
        echo '<th class="th-benefit">Gap da colmare</th>';
    } else {
        echo '<th class="th-loss">Valore perso</th>';
        echo '<th class="th-benefit">Potenziale beneficio</th>';
    }
    echo '</tr></thead><tbody>';

    if (empty($rows)) {
        echo '<tr><td colspan="5"><em>Nessun dato compilato</em></td></tr>';
    } else {
        $sum_lost = 0.0; $sum_benefit = 0.0;
        $sum_lost_keys = 0.0; $sum_benefit_keys = 0.0;
        foreach ($rows as $row) {
            $flag = "";
            $label = htmlspecialchars($row['label'], ENT_QUOTES, 'UTF-8');
            $unit  = bc_format_unit($row['unit']);
            $val   = bc_format_value($row['value_raw'], $row['unit']);
            // Formatta valori persi/beneficio
            $lost_disp = '';
            $unitvals = "";
            $tdclass = "inactive";
            $should_sum = false;
            
            if ($isQualitative) {
                // Qualitativi: valori su scala 1-5
                if (isset($row['lost_value']) && is_numeric($row['lost_value'])) {
                    $lost_disp = number_format(floatval($row['lost_value']), 1, ',', '.');
                    $should_sum = true;
                    $tdclass = "active";
                    if($row['direct']=='1') {
                        $flag = "**";
                    }
                }
                if (isset($row['benefit_value']) && is_numeric($row['benefit_value'])) {
                    $benefit_disp = number_format(floatval($row['benefit_value']), 1, ',', '.');
                } else {
                    $benefit_disp = '';
                }
            } else {
                // Quantitativi: valori in euro
                if (isset($row['lost_value']) && is_numeric($row['lost_value'])) {
                    $lost_disp = number_format(floatval($row['lost_value']), 2, ',', '.');
                    // Somma nei totali solo se l'unità del fattore è economica (contiene €)
                    if (strpos((string)$row['unit'], '€') !== false || strpos((string)$row['unit'], '%') !== false) {
                        $should_sum = true;
                        $unitvals = "€";
                        $tdclass = "active";
                        if($row['direct']=='1') {
                            $flag = "**";
                        }
                    }
                }
                if (isset($row['benefit_value']) && is_numeric($row['benefit_value'])) {
                    $benefit_disp = number_format(floatval($row['benefit_value']), 2, ',', '.');
                } else {
                    $benefit_disp = '';
                }
            }
            
            if ($should_sum) {
                $sum_lost += floatval($row['lost_value']);
                $sum_benefit += floatval($row['benefit_value']);
            }

            $factor_id = isset($row['factor_id']) ? intval($row['factor_id']) : 0;
            $lost_raw = isset($row['lost_value']) && is_numeric($row['lost_value']) ? floatval($row['lost_value']) : 0;
            $benefit_raw = isset($row['benefit_value']) && is_numeric($row['benefit_value']) ? floatval($row['benefit_value']) : 0;
            
            // Determina se questo factor è tra i top 8 diretti
            $isTop8Direct = in_array($factor_id, $top8DirectIds);
            
            // Calcola i totali chiave (top 8 direct checked)
            if ($isTop8Direct && $should_sum) {
                $sum_lost_keys += $lost_raw;
                $sum_benefit_keys += $benefit_raw;
            }
            
            $is_monetary = $should_sum ? 1 : 0;

            $rowClass = 'bc-row' . ($isTop8Direct ? ' bc-row-top8' : '');
            echo '<tr class="' . $rowClass . '" data-factor-id="' . $factor_id . '" data-lost="' . $lost_raw . '" data-benefit="' . $benefit_raw . '" data-monetary="' . $is_monetary . '">';
            // Mostra checkbox solo se $flag è "**" (cioè se è un factor direct)
            // Ma checked solo se è tra i top 8
            if ($flag === "**") {
                $checkedAttr = $isTop8Direct ? 'checked' : '';
                echo '<td><input type="checkbox" id="checkbox_' . $factor_id . '" class="bc-row-checkbox" ' . $checkedAttr . ' onclick="ricalcola()" /></td>';
            } else {
                echo '<td></td>';
            }
            echo '<td class="' . $tdclass . '">' . $label . '('.$unit.')</td>';
            echo '<td class="' . $tdclass . '">' . $val . ' ' . htmlspecialchars($unit, ENT_QUOTES, 'UTF-8') . $flag . '</td>';
            echo '<td class="' . $tdclass . '">' . $lost_disp . $unitvals . '</td>';
            echo '<td class="' . $tdclass . '">' . $benefit_disp . $unitvals . '</td>';
            echo '</tr>';
        }
        // Riga totali
        $decimals = $isQualitative ? 1 : 2;
        $unit_display = $isQualitative ? '' : ' €';
        $label_keys = $isQualitative ? 'MEDIA ELEMENTI CHIAVE' : 'TOTALE ELEMENTI CHIAVE';
        $label_all = $isQualitative ? 'MEDIA COMPLESSIVA' : 'TOTALE';
        
        // Calcola media per qualitativi, somma per quantitativi
        $count_keys = count($top8DirectIds);
        $display_lost_keys = $count_keys > 0 && $isQualitative ? ($sum_lost_keys / $count_keys) : $sum_lost_keys;
        $display_benefit_keys = $count_keys > 0 && $isQualitative ? ($sum_benefit_keys / $count_keys) : $sum_benefit_keys;
        
        $count_all = 0;
        foreach ($rows as $row) {
            if ($row['direct'] == '1' && isset($row['lost_value']) && is_numeric($row['lost_value'])) {
                $count_all++;
            }
        }
        $display_lost_all = $count_all > 0 && $isQualitative ? ($sum_lost / $count_all) : $sum_lost;
        $display_benefit_all = $count_all > 0 && $isQualitative ? ($sum_benefit / $count_all) : $sum_benefit;
        
        echo '<tr class="totals-row">';
        echo '<td colspan="3" class="totals-label">' . $label_keys . '<br><span class="testosm">Primi 8 elementi più significativi</span></td>';
        echo '<td class="th-loss">' . number_format($display_lost_keys, $decimals, ',', '.') . $unit_display . '</td>';
        echo '<td class="th-benefit">' . number_format($display_benefit_keys, $decimals, ',', '.') . $unit_display . '</td>';
        echo '</tr>';

        echo '<tr class="totals-row">';
        echo '<td colspan="3" class="totals-label">' . $label_all . '<br><span class="testosm">Tutti gli elementi chiave</span></td>';
        echo '<td class="th-loss">' . number_format($display_lost_all, $decimals, ',', '.') . $unit_display . '</td>';
        echo '<td class="th-benefit">' . number_format($display_benefit_all, $decimals, ',', '.') . $unit_display . '</td>';
        echo '</tr>';
    }
    echo '</tbody></table>';
        // Script semplificato per ricalcolo totali

}

// Tabelle: Quantitativi e Qualitativi
bc_render_table('Business Case Light - Analisi Quantitativa', $quantRows, 'quantitative');
echo '<div class="spessore"></div><div class="spessore"></div>';
bc_render_table('Business Case Light - Analisi Qualitativa', $qualRows, 'qualitative');

// Sezione Analisi AI
echo '<div class="spessore"></div><div class="spessore"></div>';

// Div per risultati (caricati subito se presenti)
$mydb->setCharset('utf8mb4');
$sql = "SELECT html_narrative, created_at FROM business_case_results WHERE answer_id='$id_item' ORDER BY created_at DESC LIMIT 1";
$mydb->DoSelect($sql);
$hasExistingAnalysis = false;
$existingNarrative = '';
$analysisDate = '';
if ($r = $mydb->GetRow()) {
    $hasExistingAnalysis = true;
    $existingNarrative = mydecodeTxt($r['html_narrative']);
    $existingNarrative = preg_replace('/^```html\\s*/i', '', $existingNarrative);
    $existingNarrative = preg_replace('/```\\s*$/', '', $existingNarrative);
    $existingNarrative = str_replace('<table', '<table class="tablegrid tablegrid3" style="display:inline-table"', $existingNarrative);
    $existingNarrative = str_replace('<th>As-Is</th>', '<th style="color:white; background-color:#dc3545;">As-Is</th>', $existingNarrative);             
    $existingNarrative = str_replace('<th>To-Be</th>', '<th style="color:white; background-color:#4CAF50;">To-Be</th>', $existingNarrative);  
    $existingNarrative = str_replace('<th>Miglioramento</th>', '<th style="color:white; background-color:#28a745;">Miglioramento</th>', $existingNarrative);                        
    $analysisDate = date('d/m/Y H:i', strtotime($r['created_at']));
}

// Controllo permessi:
// - Admin (level >= 2): possono sempre generare/rigenerare
// - Utenti (level < 2): possono generare solo se non esiste già analisi
$canGenerateAI = (intval($_level) >= 2) || (!$hasExistingAnalysis);
$aiContainerStyle = ($hasExistingAnalysis ? 'display:block;' : 'display:none;');
echo '<div id="aiResultsContainer" style="' . $aiContainerStyle . ' margin: 30px auto; max-width: 900px; padding: 30px; background: #ffffff; border: 2px solid #4CAF50; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1);">';
echo '<div class="titolo" style="color: #4CAF50; margin-bottom: 20px;">📊 Analisi AI - Business Case</div>';
if ($hasExistingAnalysis) {
    echo '<div class="testosm" style="color: #666; margin-bottom: 20px;">Generata il: ' . htmlspecialchars($analysisDate, ENT_QUOTES, 'UTF-8') . '</div>';
}
echo '<div id="aiNarrative" class="testo" style="line-height: 1.8;">';
if ($hasExistingAnalysis) {
    echo $existingNarrative; // Già contiene HTML
}
echo '</div>';
echo '</div>';

if ($canGenerateAI) {
    $btnLabel = $hasExistingAnalysis ? '🤖 Rigenera Analisi AI' : '🤖 Genera Analisi AI';
    echo '<div style="text-align: center;">';
    echo '<button type="button" class="button buttongreen" id="btnGenerateAI" onclick="generateAIAnalysis()"><div>' . $btnLabel . '</div></button>';
    echo '</div>';

    // Div per stato elaborazione
    echo '<div id="aiStatusContainer" style="display:none; margin: 20px auto; max-width: 700px; padding: 20px; background: #f0f8ff; border-radius: 8px; text-align: center;">';
    echo '<div id="aiStatusText" class="testo"></div>';
    echo '<div style="margin-top: 10px;"><img src="images/loading.gif" alt="Caricamento..." style="width: 32px;" /></div>';
    echo '</div>';
}

?>

<?php if ($canGenerateAI) { ?>
<script>
var aiPollingInterval = null;
var aiQueueId = null;

function generateAIAnalysis() {
    var btn = document.getElementById('btnGenerateAI');
    var statusContainer = document.getElementById('aiStatusContainer');
    var statusText = document.getElementById('aiStatusText');
    var resultsContainer = document.getElementById('aiResultsContainer');
    
    // Disabilita pulsante
    btn.disabled = true;
    btn.style.opacity = '0.6';
    
    // Mostra status
    statusContainer.style.display = 'block';
    statusText.innerHTML = '<strong>Preparazione dati...</strong><br>Invio richiesta a OpenAI';
    
    // Nascondi eventuali risultati precedenti
    resultsContainer.style.display = 'none';
    
    var idItem = <?php echo intval($id_item); ?>;
    
    if (typeof ajaxSrvJs === "function") {
        ajaxSrvJs("analyzeBusinessCaseAI", 
            { id_item: idItem },
            function(responseText) {
                try {
                    var data = JSON.parse(responseText);
                    if (data.error) {
                        statusText.innerHTML = '<strong style="color: red;">Errore:</strong> ' + data.error;
                        setTimeout(function() {
                            statusContainer.style.display = 'none';
                            btn.disabled = false;
                            btn.style.opacity = '1';
                        }, 5000);
                    } else if (data.success) {
                        aiQueueId = data.queue_id;
                        statusText.innerHTML = '<strong>Elaborazione in corso...</strong><br>L\'AI sta analizzando i tuoi dati. Questo potrebbe richiedere 30-60 secondi.';
                        
                        // Avvia polling
                        aiPollingInterval = setInterval(checkAIStatus, 3000);
                    }
                } catch(e) {
                    console.error("Errore parsing risposta:", e, responseText);
                    statusText.innerHTML = '<strong style="color: red;">Errore di comunicazione</strong>';
                    setTimeout(function() {
                        statusContainer.style.display = 'none';
                        btn.disabled = false;
                        btn.style.opacity = '1';
                    }, 5000);
                }
            },
            function(status, responseText) {
                console.error("Errore AJAX:", status, responseText);
                statusText.innerHTML = '<strong style="color: red;">Errore di connessione</strong>';
                setTimeout(function() {
                    statusContainer.style.display = 'none';
                    btn.disabled = false;
                    btn.style.opacity = '1';
                }, 5000);
            }
        );
    } else {
        alert('Funzione AJAX non disponibile');
        btn.disabled = false;
        btn.style.opacity = '1';
        statusContainer.style.display = 'none';
    }
}

function checkAIStatus() {
    var idItem = <?php echo intval($id_item); ?>;
    
    if (typeof ajaxSrvJs === "function") {
        ajaxSrvJs("chkAnalizzaSurveyBC", 
            { id_survey_item: idItem, id_queue: aiQueueId },
            function(responseText) {
                try {
                    var data = JSON.parse(responseText);
                    if (data.success) {
                        // Completato!
                        clearInterval(aiPollingInterval);
                        loadAIResults();
                    } else if (data.error) {
                        // Errore
                        clearInterval(aiPollingInterval);
                        var statusText = document.getElementById('aiStatusText');
                        statusText.innerHTML = '<strong style="color: red;">Errore durante l\'elaborazione</strong>';
                        setTimeout(function() {
                            document.getElementById('aiStatusContainer').style.display = 'none';
                            document.getElementById('btnGenerateAI').disabled = false;
                            document.getElementById('btnGenerateAI').style.opacity = '1';
                        }, 5000);
                    }
                    // Se status=running, continua il polling
                } catch(e) {
                    console.error("Errore polling:", e);
                }
            },
            function(status, responseText) {
                console.error("Errore polling AJAX:", status);
            }
        );
    }
}

function loadAIResults() {
    var statusContainer = document.getElementById('aiStatusContainer');
    var resultsContainer = document.getElementById('aiResultsContainer');
    var narrativeDiv = document.getElementById('aiNarrative');
    var btn = document.getElementById('btnGenerateAI');
    
    // Nascondi status
    statusContainer.style.display = 'none';
    
    // Riabilita pulsante
    btn.disabled = false;
    btn.style.opacity = '1';
    
    // Carica i risultati dal database
    var idItem = <?php echo intval($id_item); ?>;
    
    // Reload della pagina per mostrare i risultati (più semplice)
    //location.reload();
    waitpage();
    document.frm1.submit();
}
</script>
<?php } ?>

<style>
table.tablegrid3 tr.bc-row-top8, .bc-row-top8 {
    background-color: #fffbe6 !important; /* Giallo chiaro */
    background: #fffbe6 !important; /* Giallo chiaro */
}
table.tablegrid3 tr.bc-row-top8:hover, .bc-row-top8:hover {
    background-color: #fff9d6 !important;
    background: #fff9d6 !important;
}
</style>

<script>
        function ricalcola() {
            var tables = document.querySelectorAll("table.bc-table");
            tables.forEach(function(tbl) {
                var idItem = parseInt(tbl.getAttribute("data-id-item")) || 0;
                var tableType = tbl.getAttribute("data-table-type") || "quantitative";
                var isQualitative = (tableType === "qualitative");
                var selectedIds = [];
                
                tbl.querySelectorAll(".bc-row").forEach(function(row) {
                    var cb = row.querySelector(".bc-row-checkbox");
                    if (cb && cb.checked) {
                        var fid = parseInt(row.getAttribute("data-factor-id"));
                        if (fid > 0) selectedIds.push(fid);
                    }
                });
                console.log(selectedIds);
                if (typeof ajaxSrvJs === "function") {
                    ajaxSrvJs("calculateBusinessCaseTotals", 
                        { id_item: idItem, factor_ids: selectedIds, table_type: tableType },
                        function(responseText) {
                            try {
                                var data = JSON.parse(responseText);
                                if (data.success) {
                                    var decimals = isQualitative ? 1 : 2;
                                    var unitDisplay = isQualitative ? "" : " €";
                                    var lostFormatted = new Intl.NumberFormat("it-IT", {minimumFractionDigits: decimals, maximumFractionDigits: decimals}).format(data.sum_lost) + unitDisplay;
                                    var benefitFormatted = new Intl.NumberFormat("it-IT", {minimumFractionDigits: decimals, maximumFractionDigits: decimals}).format(data.sum_benefit) + unitDisplay;
                                    
                                    // Aggiorna solo la prima riga dei totali (ELEMENTI CHIAVE)
                                    var totalRows = tbl.querySelectorAll(".totals-row");
                                    if (totalRows.length > 0) {
                                        var firstTotalRow = totalRows[0];
                                        var totalLostCell = firstTotalRow.querySelector(".th-loss");
                                        var totalBenefitCell = firstTotalRow.querySelector(".th-benefit");
                                        if (totalLostCell) totalLostCell.textContent = lostFormatted;
                                        if (totalBenefitCell) totalBenefitCell.textContent = benefitFormatted;
                                    }
                                }
                            } catch(e) {
                                console.error("Errore parsing risposta AJAX:", e);
                                console.error("Risposta:", responseText);
                            }
                        },
                        function(status, responseText) {
                            console.error("Errore AJAX:", status, responseText);
                        }
                    );
                }
            });
        }
        
        function toggleAll(selectAllCb) {
            var tbl = selectAllCb.closest("table.bc-table");
            if (!tbl) return;
            
            var checked = selectAllCb.checked;
            tbl.querySelectorAll(".bc-row-checkbox").forEach(function(cb) {
                cb.checked = checked;
            });
            ricalcola();
        }
</script>


