<?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) ?? [];

$token    = trim($b['fcm_token']   ?? '');
$platform = $b['platform']         ?? 'web';
$device   = mb_substr(trim($b['device_name'] ?? ''), 0, 100);

if (!$token || strlen($token) < 10)
    Kernel::fail('invalid_token', '', 400);

$platform = in_array($platform, ['web','android','ios']) ? $platform : 'web';
$token    = substr($token, 0, 512);

try {
    // Fix 1: upsert في user_devices بدلاً من تحديث users مباشرةً
    // هذا يدعم تعدد الأجهزة لكل مستخدم
    db()->prepare(
        'INSERT INTO user_devices (user_id, fcm_token, platform, device_name, last_seen)
         VALUES (?, ?, ?, ?, NOW())
         ON DUPLICATE KEY UPDATE
           user_id     = VALUES(user_id),
           platform    = VALUES(platform),
           device_name = VALUES(device_name),
           last_seen   = NOW()'
    )->execute([$u['id'], $token, $platform, $device ?: null]);

    // إزالة الأجهزة القديمة جداً (أكثر من 90 يوم غير نشطة) للمستخدم نفسه
    db()->prepare(
        'DELETE FROM user_devices WHERE user_id = ? AND last_seen < NOW() - INTERVAL 90 DAY'
    )->execute([$u['id']]);

    json_response(['success' => true, 'platform' => $platform]);

} catch (Throwable $e) {
    // Fallback: إذا جدول user_devices غير موجود بعد — استخدم العمود القديم
    error_log('[save_fcm] user_devices fallback: ' . $e->getMessage());
    db()->prepare('UPDATE users SET fcm_token = ? WHERE id = ?')->execute([$token, $u['id']]);
    json_response(['success' => true, 'fallback' => true]);
}
