<?php

/**
 * WebPush - Генерация VAPID ключей (AJAX endpoint)
 * Возвращает JSON с публичным и приватным ключами
 */

// Отключаем отображение ошибок для чистого JSON
ini_set('display_errors', '0');
error_reporting(0);

// Устанавливаем заголовок JSON
header('Content-Type: application/json; charset=utf-8');

// Подключаем NGCMS
define('NGCMS', 1);
$root = dirname(__DIR__, 2);

// Проверяем наличие core.php
if (!file_exists($root . '/core.php')) {
    echo json_encode([
        'ok' => false,
        'error' => 'NGCMS core.php not found'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

require_once $root . '/core.php';

// Проверка прав доступа (только админ)
if (!is_array($userROW) || !isset($userROW['status']) || $userROW['status'] < 1) {
    http_response_code(403);
    echo json_encode([
        'ok' => false,
        'error' => 'Access denied. Admin only.'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

// Подключаем библиотеку из локальной папки плагина
$webpushLibPath = __DIR__ . '/lib/vendor/autoload.php';
if (!file_exists($webpushLibPath)) {
    echo json_encode([
        'ok' => false,
        'error' => 'WebPush library not found in plugin folder. Check: engine/plugins/webpush/lib/vendor/'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

require_once $webpushLibPath;

// Проверяем наличие класса VAPID
if (!class_exists('Minishlink\WebPush\VAPID')) {
    echo json_encode([
        'ok' => false,
        'error' => 'VAPID class not found. Library may be corrupted.'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    // Генерируем VAPID ключи
    $keys = \Minishlink\WebPush\VAPID::createVapidKeys();

    if (empty($keys['publicKey']) || empty($keys['privateKey'])) {
        throw new Exception('Failed to generate keys');
    }

    // Логируем генерацию
    if (function_exists('Plugins\logger')) {
        \Plugins\logger('webpush', sprintf(
            'VAPID keys generated by admin: %s (IP: %s)',
            $userROW['name'] ?? 'unknown',
            $_SERVER['REMOTE_ADDR'] ?? 'unknown'
        ));
    }

    // Возвращаем ключи
    echo json_encode([
        'ok' => true,
        'keys' => [
            'publicKey' => $keys['publicKey'],
            'privateKey' => $keys['privateKey'],
        ],
        'generated_at' => date('Y-m-d H:i:s'),
        'generated_by' => $userROW['name'] ?? 'admin',
    ], JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'ok' => false,
        'error' => 'Key generation failed: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}
