Files
2026-08-09 16:56:13 +03:00

78 lines
3.3 KiB
PHP

<?php
/**
* fuel/enroll.php — تفعيل محفظة الوقود للسائق
*
* ‏يفتح التزام `fuel_wallet` بسقف ائتمان مبدئي. لا يصرف شيئاً — الصرف
* ‏يبدأ بقسيمة، والدَّين يُقيَّد عند تأكيد المحطة.
*/
require_once __DIR__ . '/../connect.php';
require_once __DIR__ . '/functions.php';
require_once __DIR__ . '/../driver_assurance/eligibility.php';
$driverId = $user_id ?? '';
if (empty($driverId) || ($role ?? '') !== 'driver') {
jsonError('Unauthorized', 401);
}
if (fuelObligation($con, $driverId)) {
jsonError('محفظة الوقود مفعّلة لديك بالفعل');
}
$product = obligationProduct($con, FUEL_PRODUCT_CODE);
if (!$product) {
error_log('[fuel/enroll] منتج محفظة الوقود غير موجود أو مُطفأ');
jsonError('محفظة الوقود غير متاحة حالياً');
}
// ‏شروط الرحلات والتقييم تُقاس بالدالة نفسها التي يستعملها التأمين:
// ‏المنطق واحد (سائق أثبت أنه باقٍ)، وازدواج تطبيقه كان سينتج معيارين
// ‏يفترقان بصمت عند أول تعديل.
$check = assuranceCheckEligibility($con, $driverId, $product);
if (!$check['eligible']) {
jsonError('لم تستوفِ شروط محفظة الوقود بعد: ' . implode('، ', $check['reasons']));
}
// ‏بوابة الائتمان أشدّ هنا منها في التأمين: الوقود قيمة فعلية تُسلَّم في
// ‏خزّان السيارة، ولا سبيل لاستردادها إلا من أرباح تمرّ بالمحفظة.
$gate = obligationCheckWalletIncome($product, $driverId);
if (!$gate['eligible']) {
jsonError(
'محفظة الوقود تُسدَّد من أرباحك في المحفظة، ولذلك تشترط أن تمرّ أرباحك بها: '
. implode('، ', $gate['reasons'])
);
}
// ‏السقف المبدئي واحد للجميع في هذه المرحلة. رفعه بحسب سلوك السداد قرار
// ‏لاحق يحتاج بيانات لا نملكها بعد — ومنح سقف متدرّج بلا تاريخ سداد
// ‏تخمينٌ يرتدي ثوب الخوارزمية.
$defaultLimit = (float) (getenv('FUEL_DEFAULT_CREDIT_LIMIT') ?: 30);
try {
$con->beginTransaction();
$obligationId = obligationOpen($con, $driverId, FUEL_PRODUCT_CODE, [
'cycle_amount' => 0, // ‏منتج سحب: لا قسط دوري له
'rides' => $check['rides'],
'rating' => $check['rating'],
]);
$con->prepare("UPDATE driver_obligations SET credit_limit = ? WHERE id = ?")
->execute([$defaultLimit, $obligationId]);
$con->commit();
} catch (Throwable $e) {
if ($con->inTransaction()) $con->rollBack();
error_log('[fuel/enroll] ' . $e->getMessage());
jsonError('تعذّر تفعيل محفظة الوقود حالياً');
}
error_log("[fuel] فُعّلت محفظة الوقود للسائق $driverId بسقف $defaultLimit");
jsonSuccess([
'obligation_id' => $obligationId,
'credit_limit' => $defaultLimit,
'available' => $defaultLimit,
'currency' => $product['currency'],
], 'تم تفعيل محفظة الوقود');