<?php
header('Content-Type: application/json; charset=utf-8');
require_once 'config/config.php';
require_once 'config/db.php';
// Réparation PC : détection et réponse humaine
// (doit être après l'ouverture PHP)

// Simple retrieval + summarization chatbot using local DB and HTML files
// Input: { question: string }
// Output: { answer: string, sources: [string] }

$input = json_decode(file_get_contents('php://input'), true);
if (!$input || !isset($input['question'])) {
    echo json_encode(['error' => 'Paramètre question manquant']);
    exit;
}

// Prétraitement et logique humaine
$question = trim($input['question']);
if ($question === '') {
    echo json_encode(['answer' => "Je n'ai pas compris votre question. Pouvez-vous préciser ce que vous souhaitez savoir ?", 'sources' => []]);
    exit;
}

// Politesse et relance si question trop courte
if (mb_strlen($question) < 8) {
    echo json_encode(['answer' => "Pouvez-vous donner plus de détails pour que je puisse mieux vous aider ?", 'sources' => []]);
    exit;
}

// Détection de questions fréquentes/actions
$qLow = mb_strtolower($question);
// Réparation PC : détection et réponse humaine
if (preg_match('/(reparer|réparer|dépanner|panne|ordinateur|pc|fix|repair)/', $qLow)) {
    echo json_encode(['answer' => "Vous souhaitez réparer votre PC ? Nous proposons un service de réparation informatique. Vous pouvez prendre rendez-vous pour un diagnostic ou nous contacter pour plus d'informations. Voulez-vous que je vous guide vers la prise de rendez-vous ou la page de contact ?"]);
    exit;
}
if (preg_match('/(rendez[- ]?vous|rdv|prise de rendez[- ]?vous)/', $qLow)) {
    echo json_encode(['answer' => "Vous souhaitez prendre rendez-vous ? Je peux vous orienter vers la page de prise de rendez-vous ou vous aider à choisir un créneau. Voulez-vous continuer ?", 'sources' => ['make_appointment.html']]);
    exit;
}
if (preg_match('/(contact|téléphone|mail|adresse)/', $qLow)) {
    echo json_encode(['answer' => "Voici nos coordonnées de contact : vous pouvez nous joindre via la page contact ou par téléphone. Souhaitez-vous être rappelé ?", 'sources' => ['contact.php', 'it_contact.html']]);
    exit;
}
if (preg_match('/(horaire|ouverture|fermeture)/', $qLow)) {
    echo json_encode(['answer' => "Nos horaires sont affichés sur la page d'accueil et la page contact. Voulez-vous que je vous les affiche ?", 'sources' => ['it_home.html', 'it_contact.html']]);
    exit;
}

// Extraction mots-clés
$words = preg_split('/\s+/', $qLow);
$keywords = array_filter($words, function($w){ return mb_strlen($w) > 3; });
$keywords = array_values($keywords);

$sources = [];
$snippets = [];

// 1) Search database tables: services and testimonials
try {
    // Search services table (if exists)
    $stmt = $pdo->prepare("SELECT id, title, description FROM services WHERE (title LIKE ? OR description LIKE ?) LIMIT 5");
    $qLike = '%' . implode('%', $keywords) . '%';
    if (count($keywords)) {
        $stmt->execute([$qLike, $qLike]);
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        foreach ($rows as $r) {
            $sources[] = 'service:' . $r['id'] . ' - ' . ($r['title'] ?? '');
            $snippets[] = strip_tags($r['title'] . "\n" . $r['description']);
        }
    }

    // Search testimonials (if exists)
    $stmt = $pdo->prepare("SELECT id, author, content FROM testimonials WHERE content LIKE ? LIMIT 5");
    $stmt->execute([$qLike]);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($rows as $r) {
        $sources[] = 'testimonial:' . $r['id'] . ' - ' . ($r['author'] ?? '');
        $snippets[] = strip_tags($r['content']);
    }
} catch (Exception $e) {
    // Ignore DB errors and continue with file search
}

// 2) Search HTML files in the root (pages). We'll look for files under current dir (excluding admin and assets)
$dir = __DIR__;
$it = new RecursiveDirectoryIterator($dir);
$files = new RecursiveIteratorIterator($it);
foreach ($files as $file) {
    if (!$file->isFile()) continue;
    $path = $file->getRealPath();
    $rel = str_replace($dir . DIRECTORY_SEPARATOR, '', $path);

    // skip admin, node_modules, vendor, images, css, js
    if (preg_match('#^(admin|css|js|images|revolution|fonts|vendor|node_modules)#', $rel)) continue;
    if (!preg_match('#\.(html|php|htm)$#i', $path)) continue;

    $content = @file_get_contents($path);
    if (!$content) continue;
    $low = mb_strtolower(strip_tags($content));

    $score = 0;
    foreach ($keywords as $k) {
        $score += substr_count($low, $k);
    }
    if ($score > 0) {
        $sources[] = $rel;
        // grab first matching sentence as snippet
        $pos = mb_stripos($low, $keywords[0]);
        $snippet = mb_substr($low, max(0, $pos-80), 240);
        $snippets[] = trim(preg_replace('/\s+/', ' ', $snippet));
    }
}

// Build a short answer: naive summarization by joining best snippets
if (empty($snippets)) {
    $answer = "Désolé, je n'ai pas trouvé d'information pertinente dans le site ou la base de données. Vous pouvez préciser votre question.";
    echo json_encode(['answer' => $answer, 'sources' => $sources]);
    exit;
}

// pick top 3 snippets by length (proxy for relevance)
if (empty($snippets)) {
    $answer = "Je n'ai pas trouvé d'information précise sur ce sujet. Voulez-vous reformuler ou poser une autre question ?";
    echo json_encode(['answer' => $answer, 'sources' => $sources]);
    exit;
}

// Sélection des meilleurs extraits
usort($snippets, function($a, $b){ return mb_strlen($b) - mb_strlen($a); });
$top = array_slice($snippets, 0, 3);
$answer = "Voici ce que j'ai trouvé pour vous :\n\n" . implode("\n\n---\n\n", $top) . "\n\nSi vous souhaitez plus d'informations ou effectuer une action (prendre RDV, être rappelé, etc.), dites-le moi !";

echo json_encode(['answer' => $answer]);
