#!/bin/bash
# Correction webhook entreprise - parseur UUID
# À exécuter dans ~/public_html/audit/

cat > webhooks/entreprise.php << 'PHPEOF'
<?php
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/scoring.php';
require_once __DIR__ . '/../includes/pdf.php';
require_once __DIR__ . '/../includes/emails.php';

header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    die(json_encode(['error' => 'Method not allowed']));
}

$body = file_get_contents('php://input');
$data = json_decode($body, true);
if (!$data) { http_response_code(400); die(json_encode(['error' => 'JSON invalide'])); }

db_init();
db_log('WEBHOOK', 'entreprise_recu', substr($body, 0, 500));

$reponses = parser_tally_entreprise($data);
if (!$reponses) { http_response_code(400); die(json_encode(['error' => 'Parse impossible'])); }

$alertes = detecter_alertes_critiques($reponses);

$entreprise_nom   = $reponses['entreprise_nom']   ?? 'Entreprise';
$entreprise_email = $reponses['entreprise_email'] ?? '';
$contact_nom      = $reponses['contact_nom']      ?? 'Contact';
$delay_days       = max(1, min(14, intval($reponses['delai_salaries'] ?? DEFAULT_DELAY_DAYS)));
$deadline         = date('Y-m-d H:i:s', strtotime("+{$delay_days} days"));
$token            = bin2hex(random_bytes(32));

$pdo = db_connect();
$pdo->prepare("INSERT INTO audit_sessions (token, entreprise_nom, entreprise_email, contact_nom, delay_days, deadline, statut) VALUES (?, ?, ?, ?, ?, ?, 'en_attente')")
    ->execute([$token, $entreprise_nom, $entreprise_email, $contact_nom, $delay_days, $deadline]);

$score = scorer_entreprise($reponses);

$pdo->prepare("INSERT INTO reponses_entreprise (session_token, tally_response_id, reponses_json, score_total, score_detail) VALUES (?, ?, ?, ?, ?)")
    ->execute([$token, $data['data']['responseId'] ?? '', json_encode($reponses, JSON_UNESCAPED_UNICODE), $score['global'], json_encode($score['axes'], JSON_UNESCAPED_UNICODE)]);

db_log($token, 'score_entreprise', "Global: {$score['global']}/10");

$session = compact('token', 'entreprise_nom', 'entreprise_email', 'contact_nom', 'deadline');

if (!empty($alertes)) {
    email_alerte_critique($session, $alertes);
    db_log($token, 'ALERTE_CRITIQUE', implode(', ', $alertes));
}

$rapport_html = generer_rapport_ia('partiel', $session, $score, $reponses);
if ($rapport_html) {
    $pdf_path = generer_pdf($rapport_html, 'rapport_partiel_'.$token.'_'.date('Ymd').'.pdf',
        "Rapport QVCT Direction - {$entreprise_nom}", $entreprise_nom, 'partiel');
    if ($pdf_path) {
        $pdo->prepare("UPDATE audit_sessions SET statut='partiel', rapport_partiel_path=? WHERE token=?")
            ->execute([$pdf_path, $token]);
        email_validation_partiel($session, $pdf_path);
        db_log($token, 'rapport_partiel_ok', 'OK');
    }
}

$nb = max(1, min(500, intval($reponses['effectif_total'] ?? 10)));
$liens = [];
for ($i = 0; $i < $nb; $i++) {
    $lt = bin2hex(random_bytes(16));
    $pdo->prepare("INSERT INTO reponses_salaries (session_token, lien_unique) VALUES (?, ?)")->execute([$token, $lt]);
    $liens[] = ['token' => $lt];
}
email_salaries($session, $liens);
db_log($token, 'liens_salaries', "{$nb} liens");

http_response_code(200);
echo json_encode(['success' => true, 'token' => $token]);

// ============================================================
function detecter_alertes_critiques($r) {
    $alertes    = [];
    $signaux    = strtolower($r['signaux_stress'] ?? '');
    $situations = strtolower($r['situations_graves'] ?? '');
    if (str_contains($signaux, 'suicidaires') || str_contains($signaux, 'detresse'))
        $alertes[] = 'pensees_suicidaires_equipes';
    if (str_contains($situations, 'suicidaires'))
        $alertes[] = 'pensees_suicidaires_graves';
    if (str_contains($situations, 'harcelement') || str_contains($situations, 'harcèlement'))
        $alertes[] = 'harcelement';
    if (str_contains($situations, 'burn-out'))
        $alertes[] = 'burnout_declare';
    return $alertes;
}

// ============================================================
// PARSEUR V2 — Résout les UUIDs Tally en texte via options[]
// ============================================================
function parser_tally_entreprise($data) {
    try {
        $fields   = $data['data']['fields'] ?? [];
        $reponses = [];

        foreach ($fields as $field) {
            $label   = strtolower(trim($field['label'] ?? ''));
            $value   = $field['value'] ?? null;
            $options = $field['options'] ?? [];
            $type    = $field['type'] ?? '';

            // Ignorer les sous-champs booléens CHECKBOXES (ex: question_xxx_uuid)
            if ($type === 'CHECKBOXES' && is_bool($value)) {
                continue;
            }

            // Résoudre UUIDs en texte via options[]
            if (is_array($value) && !empty($options)) {
                $option_map = [];
                foreach ($options as $opt) {
                    if (isset($opt['id'], $opt['text'])) {
                        $option_map[$opt['id']] = $opt['text'];
                    }
                }
                $texts = [];
                foreach ($value as $uuid) {
                    $texts[] = $option_map[$uuid] ?? $uuid;
                }
                $value = implode(', ', $texts);
            } elseif (is_array($value)) {
                $value = implode(', ', $value);
            }

            $cle = mapper_label_entreprise($label);
            if ($cle) {
                $reponses[$cle] = $value;
            }
        }

        return $reponses;
    } catch (Exception $e) {
        error_log('[CDB] Parser: ' . $e->getMessage());
        return null;
    }
}

function mapper_label_entreprise($label) {
    $map = [
        'informations entreprises'                              => 'entreprise_nom',
        'raison sociale'                                        => 'entreprise_nom',
        'votre mail professionnel'                              => 'entreprise_email',
        'votre email'                                           => 'entreprise_email',
        'votre prénom et nom'                                   => 'contact_nom',
        'qui remplit cet audit'                                 => 'role_repondant',
        'secteur d\'activité principal'                         => 'secteur',
        'combien de salariés compte votre entreprise'           => 'taille_entreprise',
        'quel est votre effectif total exact'                   => 'effectif_total',
        'comment sont répartis vos collaborateurs'              => 'repartition_postes',
        'poste terrain'                                         => 'nb_terrain',
        'en horaires décalés'                                   => 'nb_decales',
        'situation sociale'                                     => 'situation_sociale',
        'où en êtes-vous sur la qvct'                           => 'qvct_niveau',
        'taux national de 6%'                                   => 'absenteisme',
        'taux de turn-over'                                     => 'turnover',
        'taux d\'absentéisme exact'                             => 'absenteisme_exact',
        'taux de turn-over annuel'                              => 'turnover_exact',
        'organisation des interventions bien-être'              => 'organisation_bien_etre',
        'posture face à la qvct'                                => 'posture_qvct',
        'observez-vous actuellement ces signaux'                => 'signaux_equipes',
        'environnement physique de travail'                     => 'env_physique',
        'espaces de pause'                                      => 'espaces_pause',
        'collaborateurs se plaignent-ils de douleurs'           => 'douleurs_physiques',
        'arrêts maladie liés à des douleurs physiques ou tms'  => 'arrets_tms',
        'd\'où pensez-vous que viennent principalement ces douleurs' => 'origine_douleurs',
        'depuis quand observez-vous ces problèmes physiques'    => 'anciennete_douleurs',
        'ces douleurs ou problèmes physiques concernent'        => 'perimetre_douleurs',
        'actions ont-elles déjà été mises en place pour ce problème' => 'actions_tms',
        'observez-vous des signes de stress ou de surcharge mentale' => 'signaux_stress',
        'comment vos managers gèrent-ils la pression'           => 'gestion_managers',
        'd\'où vient principalement le stress dans votre organisation' => 'origine_stress',
        'ces signaux de stress sont-ils'                        => 'anciennete_stress',
        'avez-vous eu des situations graves ces 12 derniers mois' => 'situations_graves',
        'actions ont-elles déjà été mises en place pour gérer le stress' => 'actions_rps',
        'comment évaluez-vous la charge de travail dans vos équipes' => 'charge_travail',
        'les rôles, missions et responsabilités sont-ils clairement définis' => 'roles_definis',
        'd\'où vient principalement ce problème d\'organisation' => 'origine_organisation',
        'ces difficultés d\'organisation sont-elles'            => 'anciennete_organisation',
        'ces problèmes d\'organisation touchent'                => 'perimetre_organisation',
        'comment qualifieriez-vous le climat entre les équipes' => 'climat_equipes',
        'les collaborateurs peuvent-ils s\'exprimer librement'  => 'expression_libre',
        'd\'où viennent principalement ces tensions ou difficultés relationnelles' => 'origine_tensions',
        'ces tensions relationnelles sont-elles'                => 'anciennete_tensions',
        'quel est le niveau de gravité de ces tensions'         => 'gravite_tensions',
        'les conditions matérielles de travail sont-elles adaptées' => 'conditions_materielles',
        'comment percevez-vous l\'engagement de vos collaborateurs' => 'engagement',
        'd\'où vient principalement ce manque de conditions ou d\'engagement' => 'origine_desengagement',
        'ce désengagement ou ces conditions insuffisantes touchent' => 'perimetre_desengagement',
        'budget envisagez-vous'                                 => 'budget_qvct',
        'démarche qvct'                                         => 'maturite_qvct',
        'actions bien-être ou qvct par le passé'                => 'actions_passees',
        'impact visible sur le terrain'                         => 'impact_actions_passees',
        'commentaire'                                           => 'commentaire_libre',
    ];

    foreach ($map as $pattern => $cle) {
        if (str_contains($label, $pattern)) return $cle;
    }
    return null;
}
PHPEOF

echo "✅ webhook entreprise.php mis à jour"
