<?php
require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../engine/Kernel.php';
require_once __DIR__ . '/../engine/Logger.php'; // COVERAGE
$ctx = Kernel::handle(['auth' => true]);
$u   = $ctx['user'];
$b      = json_decode(file_get_contents('php://input'), true) ?? [];
$action = $b['action'] ?? 'get';

// ── جلب الملف الشخصي ─────────────────────────────────────────
if ($action === 'get') {
    // إخفاء البيانات الحساسة
    unset($u['password_hash']);
    json_response(['success' => true, 'user' => $u]);
}

// ── تحديث الملف الشخصي ────────────────────────────────────────
if ($action === 'update') {
    $name  = mb_substr(trim($b['name']  ?? $u['name']), 0, 100);
    $city  = mb_substr(trim($b['city']  ?? $u['city']  ?? ''), 0, 100);
    $state = mb_substr(trim($b['state'] ?? $u['state'] ?? ''), 0, 100);
    $hood  = isset($b['neighborhood_id']) ? (int)$b['neighborhood_id'] : (int)($u['neighborhood_id'] ?? 0);
    $hood_name = mb_substr(trim($b['neighborhood'] ?? $u['neighborhood'] ?? ''), 0, 100);
    db()->prepare('UPDATE users SET name=?, city=?, state=?, neighborhood_id=?, neighborhood=? WHERE id=?')
        ->execute([$name, $city, $state, $hood ?: null, $hood_name, $u['id']]);
    json_response(['success' => true, 'message' => 'تم تحديث الملف الشخصي']);
}

// ── Fix 2: تغيير المسار التعليمي يدوياً ──────────────────────
if ($action === 'change_track') {
    $new_track = $b['track'] ?? '';
    $allowed   = ['foundation', 'growth', 'leadership'];

    if (!in_array($new_track, $allowed))
        json_response(['error' => 'invalid_track', 'allowed' => $allowed], 400);

    if ($new_track === $u['learning_track'])
        json_response(['success' => true, 'message' => 'أنت بالفعل في هذا المسار', 'track' => $new_track]);

    db()->prepare('UPDATE users SET learning_track = ? WHERE id = ?')
        ->execute([$new_track, $u['id']]);

    $track_names = [
        'foundation'  => 'مسار الأساس 🌱',
        'growth'      => 'مسار النمو 🚀',
        'leadership'  => 'مسار القيادة 🏆',
    ];

    json_response([
        'success'   => true,
        'track'     => $new_track,
        'track_name'=> $track_names[$new_track],
        'message'   => 'تم تغيير مسارك لـ ' . $track_names[$new_track] . ' — أبشر!',
    ]);
}

// ── تغيير كلمة المرور ─────────────────────────────────────────
if ($action === 'change_password') {
    $old = $b['old_password'] ?? '';
    $new = $b['new_password'] ?? '';

    if (!$u['password_hash'] || !password_verify($old, $u['password_hash']))
        Kernel::fail('wrong_password', 'كلمة المرور الحالية غير صحيحة', 400);
    if (mb_strlen($new) < 6)
        Kernel::fail('weak_password', 'كلمة المرور 6 أحرف على الأقل', 400);

    db()->prepare('UPDATE users SET password_hash = ? WHERE id = ?')
        ->execute([password_hash($new, PASSWORD_BCRYPT, ['cost' => 11]), $u['id']]);

    // FIX BUG 7: إلغاء جميع الجلسات تماماً ثم إعادة إنشاء الجلسة الحالية
    $current_token = $_SESSION['session_token'] ?? '';
    db()->prepare('DELETE FROM sessions WHERE user_id = ?')->execute([$u['id']]);

    // إنشاء جلسة جديدة للمستخدم الحالي
    if ($current_token) {
        $new_token   = bin2hex(random_bytes(32));
        $new_expires = date('Y-m-d H:i:s', time() + SESSION_LIFETIME);
        db()->prepare('INSERT INTO sessions (user_id, token, expires_at) VALUES (?,?,?)')
             ->execute([$u['id'], hash('sha256', $new_token), $new_expires]);
        $_SESSION['session_token'] = $new_token;
    }

    // إرسال إيميل تأكيد تغيير كلمة المرور
    try { send_password_changed_email($u['email'], $u['name']); } catch(Throwable $ignored) {}

    json_response(['success' => true, 'message' => 'تم تغيير كلمة المرور — تمام العافية! 🔐']);
}

// ── جلب أجهزة المستخدم ────────────────────────────────────────
if ($action === 'get_devices') {
    try {
        $st = db()->prepare(
            'SELECT id, platform, device_name, last_seen, created_at
             FROM user_devices WHERE user_id = ? ORDER BY last_seen DESC'
        );
        $st->execute([$u['id']]);
        json_response(['success' => true, 'devices' => $st->fetchAll()]);
    } catch (Throwable $e) {
        json_response(['success' => true, 'devices' => [], 'note' => 'run migrate.sql first']);
    }
}

// ── إزالة جهاز محدد ───────────────────────────────────────────
if ($action === 'remove_device') {
    $device_id = (int)($b['device_id'] ?? 0);
    try {
        db()->prepare('DELETE FROM user_devices WHERE id = ? AND user_id = ?')
            ->execute([$device_id, $u['id']]);
        json_response(['success' => true]);
    } catch (Throwable $e) {
        Kernel::fail('not_available', '', 503);
    }
}

Kernel::fail('unknown_action', '', 400);
