php
$verify_token = "wisal_secr
$db_host = "localhost";
$db_name = "wisal_db";
$db_user = "wisal_user";
$db_pass = "AZazazazaz5**";

// ===== جزء التحقق الأولي (GET) =====
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $mode = $_GET['hub_mode'] ?? '';
    $token = $_GET['hub_verify_token'] ?? '';
    $challenge = $_GET['hub_challenge'] ?? '';
    if ($mode === 'subscribe' && $token === $verify_token) {
        echo $challenge;
        http_response_code(200);
    } else {
        http_response_code(403);
    }
    exit;
}

// ===== دالة إرسال رسالة واتساب =====
function sendWhatsAppMessage($to, $text, $token, $phone_number_id) {
    $url = "https://graph.facebook.com/v21.0/{$phone_number_id}/messages";
    $data = [
        "messaging_product" => "whatsapp",
        "to" => $to,
        "type" => "text",
        "text" => ["body" => $text]
    ];
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer {$token}",
        "Content-Type: application/json"
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    $resp = curl_exec($ch);
    file_put_contents("/var/www/html/send_debug.txt", date("Y-m-d H:i:s") . " - " . $resp . "\n", FILE_APPEND);
    curl_close($ch);
}

// ===== جزء استقبال الرسائل (POST) =====
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $input = file_get_contents('php://input');
    file_put_contents('/var/www/html/webhook_log.txt', date('Y-m-d H:i:s') . " - " . $input . "\n", FILE_APPEND);

    $data = json_decode($input, true);

    $messages = $data['entry'][0]['changes'][0]['value']['messages'] ?? null;

    if ($messages) {
        $from = $messages[0]['from']; // رقم المريض
        $msgBody = trim($messages[0]['text']['body'] ?? '');

        try {
            $pdo = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8mb4", $db_user, $db_pass);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            // نجيب حالة المحادثة الحالية لهذا الرقم
            $stmt = $pdo->prepare("SELECT * FROM conversation_state WHERE whatsapp_number = ?");
            $stmt->execute([$from]);
            $state = $stmt->fetch(PDO::FETCH_ASSOC);

            $current_step = $state['current_step'] ?? 'start';
            $temp_data = $state['temp_data'] ? json_decode($state['temp_data'], true) : [];

            // ===== كلمات الطوارئ - أولوية قصوى =====
            $emergency_words = ['طوارئ', 'خطير', 'نفس', 'اختناق', 'ألم شديد', 'حالة طارئة'];
            $isEmergency = false;
            foreach ($emergency_words as $word) {
                if (mb_strpos($msgBody, $word) !== false) {
                    $isEmergency = true;
                    break;
                }
            }

            if ($isEmergency) {
                $reply = "⚠️ إذا هذي حالة طارئة، الرجاء الاتصال فوراً بالطوارئ أو التوجه لأقرب مستشفى.\n\nهذا البوت مخصص للحجوزات فقط وما يقدر يوفر استجابة طبية فورية.";
                sendWhatsAppMessage($from, $reply, $wa_token, $phone_number_id);
                exit;
            }

            // ===== منطق المحادثة حسب الخطوة الحالية =====
            switch ($current_step) {

                case 'start':
                    $reply = "أهلاً بيك بمنصة وصال الطبية 🏥\nشلون أگدر أساعدك اليوم؟\n\n1️⃣ حجز موعد جديد\n2️⃣ الاستفسار عن موعد موجود\n3️⃣ التحدث مع موظف";
                    $newStep = 'main_menu';
                    break;

                case 'main_menu':
                    if ($msgBody === '1') {
                        // نجيب التخصصات المتوفرة من قاعدة البيانات
                        $stmt = $pdo->query("SELECT DISTINCT specialty FROM doctors");
                        $specialties = $stmt->fetchAll(PDO::FETCH_COLUMN);
                        $list = "";
                        foreach ($specialties as $i => $sp) {
                            $list .= ($i+1) . "️⃣ {$sp}\n";
                        }
                        $reply = "تمام! شنو التخصص اللي تحتاجه؟\n\n" . $list;
                        $temp_data['specialties'] = $specialties;
                        $newStep = 'choose_specialty';
                    } else {
                        $reply = "عذراً، ما فهمت اختيارك. من فضلك اختار رقم من القائمة:\n\n1️⃣ حجز موعد جديد\n2️⃣ الاستفسار عن موعد موجود\n3️⃣ التحدث مع موظف";
                        $newStep = 'main_menu';
                    }
                    break;

                case 'choose_specialty':
                    $specialties = $temp_data['specialties'] ?? [];
                    $index = intval($msgBody) - 1;
                    if (isset($specialties[$index])) {
                        $chosen = $specialties[$index];
                        $stmt = $pdo->prepare("SELECT id, name, available_days FROM doctors WHERE specialty = ?");
                        $stmt->execute([$chosen]);
                        $doctors = $stmt->fetchAll(PDO::FETCH_ASSOC);
                        $list = "";
                        foreach ($doctors as $i => $doc) {
                            $list .= ($i+1) . "️⃣ {$doc['name']} — متاح: {$doc['available_days']}\n";
                        }
                        $reply = "عندنا بتخصص {$chosen}:\n\n{$list}\nاختار رقم الدكتور";
                        $temp_data['doctors'] = $doctors;
                        $newStep = 'choose_doctor';
                    } else {
                        $reply = "من فضلك اختار رقم صحيح من قائمة التخصصات.";
                        $newStep = 'choose_specialty';
                    }
                    break;

                case 'choose_doctor':
                    $doctors = $temp_data['doctors'] ?? [];
                    $index = intval($msgBody) - 1;
                    if (isset($doctors[$index])) {
                        $temp_data['chosen_doctor'] = $doctors[$index];
                        $reply = "اختار موعدك مع {$doctors[$index]['name']}:\n\n1️⃣ 10:00 صباحاً\n2️⃣ 11:30 صباحاً\n3️⃣ 5:00 مساءً";
                        $newStep = 'choose_time';
                    } else {
                        $reply = "من فضلك اختار رقم دكتور صحيح.";
                        $newStep = 'choose_doctor';
                    }
                    break;

                case 'choose_time':
                    $times = ['10:00 صباحاً', '11:30 صباحاً', '5:00 مساءً'];
                    $index = intval($msgBody) - 1;
                    if (isset($times[$index])) {
                        $temp_data['chosen_time'] = $times[$index];
                        $reply = "شكلك أول مرة تحجز وياتنا، ممكن اسمك الكامل؟";
                        $newStep = 'get_name';
                    } else {
                        $reply = "من فضلك اختار رقم وقت صحيح.";
                        $newStep = 'choose_time';
                    }
                    break;

                case 'get_name':
                    $doctor = $temp_data['chosen_doctor'];
                    $time = $temp_data['chosen_time'];

                    // نسجل المريض إذا مو مسجل
                    $stmt = $pdo->prepare("SELECT id FROM patients WHERE whatsapp_number = ?");
                    $stmt->execute([$from]);
                    $patient = $stmt->fetch(PDO::FETCH_ASSOC);
                    if (!$patient) {
                        $stmt = $pdo->prepare("INSERT INTO patients (name, whatsapp_number) VALUES (?, ?)");
                        $stmt->execute([$msgBody, $from]);
                        $patient_id = $pdo->lastInsertId();
                    } else {
                        $patient_id = $patient['id'];
                    }

                    // نسجل الموعد
                    $stmt = $pdo->prepare("INSERT INTO appointments (patient_id, doctor_id, appointment_date, status) VALUES (?, ?, NOW(), 'confirmed')");
                    $stmt->execute([$patient_id, $doctor['id']]);

                    $reply = "✅ تم تأكيد موعدك بنجاح!\n\n👨‍⚕️ الطبيب: {$doctor['name']}\n🕐 الوقت: {$time}\n\nراح نرسلك تذكير قبل الموعد. لأي استفسار اكتب \"مساعدة\"";
                    $newStep = 'start';
                    $temp_data = [];
                    break;

                default:
                    $reply = "أهلاً بيك بمنصة وصال الطبية 🏥\nشلون أگدر أساعدك اليوم؟\n\n1️⃣ حجز موعد جديد\n2️⃣ الاستفسار عن موعد موجود\n3️⃣ التحدث مع موظف";
                    $newStep = 'main_menu';
            }

            // نحفظ الحالة الجديدة بقاعدة البيانات
            $stmt = $pdo->prepare("INSERT INTO conversation_state (whatsapp_number, current_step, temp_data) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE current_step = ?, temp_data = ?");
            $stmt->execute([$from, $newStep, json_encode($temp_data), $newStep, json_encode($temp_data)]);

            // نرسل الرد
            sendWhatsAppMessage($from, $reply, $wa_token, $phone_number_id);

        } catch (Exception $e) {
            file_put_contents('/var/www/html/error_log.txt', date('Y-m-d H:i:s') . " - " . $e->getMessage() . "\n", FILE_APPEND);
        }
    }

    http_response_code(200);
    echo "OK";
    exit;
}
