<?php
/**
 * Kullanıcı tercihlerini güncelleyen AJAX endpoint'i
 * 
 * Kullanım:
 * POST /ajax/update_preferences.php
 * 
 * Parametreler:
 * - type: Güncellenecek tercihin türü (theme, lang)
 * - value: Güncellenecek değer
 */

require_once __DIR__ . '/../config/database.php';
global $db, $translations;

// JSON response döndürme fonksiyonu
function json_response($success, $message = '', $data = []) {
    header('Content-Type: application/json');
    echo json_encode(array_merge(
        ['success' => $success, 'message' => $message],
        $data
    ));
    exit;
}

// Yalnızca POST isteklerine izin ver
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    json_response(false, 'Yalnızca POST istekleri kabul edilir');
}

// Giriş yapılmış mı kontrol et
if (!is_logged_in()) {
    json_response(false, 'Bu işlem için giriş yapmanız gerekiyor');
}

// CSRF token kontrolü
$csrf_token = $_POST['X-CSRF-Token'] ?? $_SERVER['HTTP_X_CSRF_TOKEN'] ?? '';
if (!verify_csrf_token($csrf_token)) {
    json_response(false, 'Geçersiz güvenlik tokeni');
}

// Parametreleri kontrol et
$type = $_POST['type'] ?? '';
$value = $_POST['value'] ?? '';

if (empty($type) || empty($value)) {
    json_response(false, 'Eksik parametreler');
}

// Veritabanı bağlantısı kontrolü
if (!isset($db) || !($db instanceof PDO)) {
    json_response(false, 'Veritabanı bağlantısı kurulamadı');
}

try {
    $allowed_types = ['theme', 'lang'];
    
    if (!in_array($type, $allowed_types)) {
        json_response(false, 'Geçersiz tercih türü');
    }
    
    // Değerlerin geçerliliğini kontrol et
    if ($type === 'theme' && !in_array($value, ['light', 'dark'])) {
        json_response(false, 'Geçersiz tema değeri');
    }
    
    if ($type === 'lang' && !in_array($value, ['tr', 'en'])) {
        json_response(false, 'Geçersiz dil değeri');
    }
    
    // Veritabanında güncelleme yap
    $stmt = $db->prepare("UPDATE users SET $type = ? WHERE id = ?");
    if (!$stmt) {
        json_response(false, 'Sorgu hazırlama hatası');
    }
    
    $result = $stmt->execute([$value, $_SESSION['user_id']]);
    
    if ($result) {
        // Session değerini de güncelle
        $_SESSION[$type] = $value;
        
        // Cookie'yi güncelle
        setcookie($type, $value, time() + (365 * 24 * 60 * 60), "/");
        
        json_response(true, 'Tercihleriniz başarıyla güncellendi');
    } else {
        json_response(false, 'Tercihleriniz güncellenirken bir hata oluştu');
    }
} catch (PDOException $e) {
    // Hata logla ve genel bir hata mesajı döndür
    error_log("Preference update error: " . $e->getMessage());
    json_response(false, 'Tercihleriniz güncellenirken bir hata oluştu');
}
?> 