<?php
declare(strict_types=1);

ini_set('display_errors', '0');
require_once __DIR__ . '/../auth.php';
require_once __DIR__ . '/../db_bootstrap.php';
require_once __DIR__ . '/api_common.php';
require_once __DIR__ . '/../comms_admin_lib.php';

api_require_login();
if (function_exists('require_any_perm')) {
    require_any_perm(['can_settings', 'can_mikrotik_sync']);
} elseif (function_exists('require_perm')) {
    require_perm('can_settings');
}

header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');

try {
    $conn = ensure_db(false);
    if (!($conn instanceof mysqli)) {
        throw new RuntimeException('تعذر الوصول إلى قاعدة بيانات إعدادات الراوترات.');
    }
    comms_ensure_tables($conn);

    $routerId = (int)($_GET['router_id'] ?? 0);
    $router = $routerId > 0 ? comms_get_router($conn, $routerId) : null;
    if (!$router) {
        http_response_code(404);
        echo json_encode(['ok' => false, 'message' => 'الراوتر المطلوب غير موجود.'], JSON_UNESCAPED_UNICODE);
        exit;
    }
    if (empty($router['is_enabled'])) {
        echo json_encode(['ok' => false, 'message' => 'الراوتر متوقف في الإعدادات؛ فعّله أولاً ثم أعد الاختبار.'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    $error = '';
    $api = comms_mt_connect($router, $error);
    if (!$api) {
        echo json_encode([
            'ok' => false,
            'message' => $error !== '' ? $error : 'تعذر فتح جلسة RouterOS API.',
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    try {
        $rows = ua_mt_call($api, '/system/resource/print');
        $valid = is_array($rows) && count($rows) > 0;
        if (!$valid) {
            echo json_encode([
                'ok' => false,
                'message' => 'تم فتح المنفذ، لكن RouterOS لم يُرجع قراءة نظام صالحة. تحقق من الصلاحيات وبيانات الدخول.',
            ], JSON_UNESCAPED_UNICODE);
            exit;
        }

        $first = is_array(reset($rows)) ? reset($rows) : $rows;
        $identity = trim((string)($first['board-name'] ?? $first['platform'] ?? $router['name'] ?? 'MikroTik'));
        $version = trim((string)($first['version'] ?? ''));
        $suffix = $version !== '' ? ' — RouterOS ' . $version : '';
        echo json_encode([
            'ok' => true,
            'message' => 'نجح الاتصال والقراءة من ' . $identity . $suffix . '.',
        ], JSON_UNESCAPED_UNICODE);
    } finally {
        comms_mt_safe_disconnect($api);
    }
} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode(['ok' => false, 'message' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
}
