<?php
declare(strict_types=1);

require_once dirname(__DIR__) . '/db_bootstrap.php';
require_once dirname(__DIR__) . '/subscribers_lib.php';

function sps_assert(bool $condition, string $message): void
{
    if (!$condition) throw new RuntimeException($message);
}

sps_assert(subs_policy_default_pppoe_domain() === 'exa.net', 'يجب أن يكون الافتراضي المركزي exa.net.');
sps_assert(subs_policy_normalize_pppoe_domain(' @EXA.NET ') === 'exa.net', 'يجب تطبيع اللاحقة وإزالة @.');
sps_assert(subs_policy_normalize_pppoe_domain('bad..domain') === '', 'يجب رفض اللاحقة غير الصالحة.');
sps_assert(subs_policy_username_domain('member@exa.net') === 'exa.net', 'يجب استخراج لاحقة الحساب.');

$conn = ensure_db(true);
$configured = subs_policy_normalize_pppoe_domain((string)setting_get(
    $conn,
    'pppoe_account_suffix',
    subs_policy_default_pppoe_domain()
));
$expected = $configured !== '' ? $configured : subs_policy_default_pppoe_domain();
sps_assert(subs_policy_pppoe_domain($conn) === $expected, 'يجب قراءة اللاحقة من مخزن إعدادات البرنامج مباشرة.');

$current = subs_policy_staged_account_status($conn, [
    'pending_ppp_username' => 'member@' . $expected,
    'pending_ppp_policy_suffix' => $expected,
]);
sps_assert(!empty($current['ready']) && empty($current['stale']), 'يجب قبول البيانات المجهزة وفق اللاحقة الحالية.');

$stale = subs_policy_staged_account_status($conn, [
    'pending_ppp_username' => 'member@legacy.invalid',
    'pending_ppp_policy_suffix' => 'legacy.invalid',
]);
sps_assert(empty($stale['ready']) && !empty($stale['stale']), 'يجب منع البيانات المجهزة بلاحقة قديمة.');

echo "subscriber_pppoe_suffix_policy_test: OK\n";
