<?php
/**
 * ✅ Endpoint لتحديث اسم الجهاز من التطبيق
 * يستقبل device_id و device_name ويحدث MySQL و Firebase
 */

header('Content-Type: application/json; charset=UTF-8');
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/firebase_service.php';

$response = ['success' => false, 'message' => ''];

try {
    // جلب البيانات من POST
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    // إذا لم يكن JSON، جرب POST العادي
    if (!$data) {
        $data = $_POST;
    }
    
    $deviceId = trim($data['device_id'] ?? '');
    $deviceName = trim($data['device_name'] ?? '');
    
    if (empty($deviceId)) {
        $response['message'] = 'معرف الجهاز مطلوب';
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    if (empty($deviceName)) {
        $response['message'] = 'اسم الجهاز مطلوب';
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    // ✅ 1. تحديث في MySQL - جدول devices
    try {
        $stmt = $conn->prepare("
            UPDATE devices 
            SET device_name = ?, updated_at = CURRENT_TIMESTAMP 
            WHERE device_id = ?
        ");
        $stmt->execute([$deviceName, $deviceId]);
        
        $updated = $stmt->rowCount() > 0;
        
        if (!$updated) {
            // إذا لم يكن موجوداً، أضفه
            $insertStmt = $conn->prepare("
                INSERT INTO devices (device_id, device_name, status) 
                VALUES (?, ?, 'active')
                ON DUPLICATE KEY UPDATE 
                    device_name = VALUES(device_name),
                    updated_at = CURRENT_TIMESTAMP
            ");
            $insertStmt->execute([$deviceId, $deviceName]);
            $updated = true;
        }
        
        if ($updated) {
            error_log("✅ [update_device_name.php] تم تحديث اسم الجهاز في MySQL (devices): {$deviceId} -> {$deviceName}");
        }
    } catch (PDOException $e) {
        error_log("❌ [update_device_name.php] خطأ في تحديث MySQL: " . $e->getMessage());
        $response['message'] = 'خطأ في تحديث قاعدة البيانات: ' . $e->getMessage();
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    // ✅ 2. تحديث في MySQL - جدول locations (إذا كان يحتوي على device_name)
    try {
        $stmtLocations = $conn->prepare("
            UPDATE locations 
            SET device_name = ?, updated_at = CURRENT_TIMESTAMP 
            WHERE device_id = ?
        ");
        $stmtLocations->execute([$deviceName, $deviceId]);
        $locationsUpdated = $stmtLocations->rowCount();
        if ($locationsUpdated > 0) {
            error_log("✅ [update_device_name.php] تم تحديث اسم الجهاز في {$locationsUpdated} موقع في جدول locations");
        }
    } catch (PDOException $e) {
        // تجاهل الخطأ إذا كان الجدول غير موجود أو لا يحتوي على device_name
        error_log("ℹ️ [update_device_name.php] جدول locations لا يحتوي على device_name أو غير موجود");
    }
    
    // ✅ 3. تحديث في MySQL - جدول device_contacts (نسخ احتياطي لجهات الاتصال)
    try {
        $stmtContacts = $conn->prepare("
            UPDATE device_contacts 
            SET device_name = ? 
            WHERE device_id = ?
        ");
        $stmtContacts->execute([$deviceName, $deviceId]);
        $contactsUpdated = $stmtContacts->rowCount();
        if ($contactsUpdated > 0) {
            error_log("✅ [update_device_name.php] تم تحديث اسم الجهاز في {$contactsUpdated} سجل في جدول device_contacts");
        }
    } catch (PDOException $e) {
        // تجاهل الخطأ إذا كان الجدول غير موجود
        error_log("ℹ️ [update_device_name.php] جدول device_contacts غير موجود أو حدث خطأ: " . $e->getMessage());
    }
    
    // ✅ 4. إنشاء ملف flag لتحديث الكاش في Dashboard
    $flagFile = __DIR__ . '/cache_flags/device_name_updated_' . $deviceId . '.flag';
    $flagDir = dirname($flagFile);
    if (!is_dir($flagDir)) {
        @mkdir($flagDir, 0755, true);
    }
    @file_put_contents($flagFile, time());
    
    // تحديث في Firebase (فقط عند تفعيل Firebase)
    $firebaseUpdated = false;
    if (defined('USE_FIREBASE') && USE_FIREBASE) {
        try {
            $firebaseUpdated = FirebaseService::updateDeviceName($deviceId, $deviceName);
            if ($firebaseUpdated) {
                error_log("✅ [update_device_name.php] تم تحديث اسم الجهاز في Firebase: {$deviceId} -> {$deviceName}");
            } else {
                error_log("⚠️ [update_device_name.php] فشل تحديث اسم الجهاز في Firebase: {$deviceId}");
            }
        } catch (Exception $e) {
            error_log("❌ [update_device_name.php] خطأ في تحديث Firebase: " . $e->getMessage());
        }
        
        try {
            $firebaseInitialized = FirebaseService::testConnection();
            if ($firebaseInitialized && method_exists('FirebaseService', 'sendLocation')) {
                $deviceInfo = [
                    'device_id' => $deviceId,
                    'device_name' => $deviceName,
                    'latitude' => 0.0,
                    'longitude' => 0.0,
                    'timestamp' => date('Y-m-d H:i:s'),
                    'status' => 'device_name_updated',
                    'is_device_name_update' => true,
                ];
                FirebaseService::sendLocation($deviceInfo);
            }
        } catch (Exception $e) {
            error_log("⚠️ [update_device_name.php] خطأ في إرسال موقع تحديث الاسم: " . $e->getMessage());
        }
    }
    
    $response['success'] = true;
    $updateDetails = [];
    $updateDetails[] = 'MySQL (devices)';
    if (isset($locationsUpdated) && $locationsUpdated > 0) {
        $updateDetails[] = "MySQL (locations: {$locationsUpdated})";
    }
    if (isset($contactsUpdated) && $contactsUpdated > 0) {
        $updateDetails[] = "MySQL (device_contacts: {$contactsUpdated})";
    }
    if ($firebaseUpdated) {
        $updateDetails[] = 'Firebase';
    }
    
    if (defined('USE_FIREBASE') && USE_FIREBASE && !$firebaseUpdated) {
        $response['message'] = '✅ تم تحديث اسم الجهاز في: ' . implode(', ', $updateDetails) . ' (فشل Firebase)';
    } else {
        $response['message'] = '✅ تم تحديث اسم الجهاز بنجاح في: ' . implode(', ', $updateDetails);
    }
    
} catch (Exception $e) {
    error_log("❌ [update_device_name.php] خطأ عام: " . $e->getMessage());
    $response['message'] = 'خطأ: ' . $e->getMessage();
}

echo json_encode($response, JSON_UNESCAPED_UNICODE);
?>

