From 823805417c97ffa953106c3a95afd45ce7f1380c Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Mon, 6 Jul 2026 03:06:32 +0300 Subject: [PATCH] Update: 2026-07-06 03:06:32 --- backend/api/ride/get_competitor_context.php | 155 ++++++++------------ 1 file changed, 58 insertions(+), 97 deletions(-) diff --git a/backend/api/ride/get_competitor_context.php b/backend/api/ride/get_competitor_context.php index 24ea12d1..a03dd09e 100644 --- a/backend/api/ride/get_competitor_context.php +++ b/backend/api/ride/get_competitor_context.php @@ -1,120 +1,81 @@ "error", "message" => "Missing parameters"]); exit; } -$lat = (float)$lat; -$lng = (float)$lng; -$countryCode = strtoupper($countryCode); +$countryCode = strtoupper($country); +if ($countryCode == 'JORDAN') $countryCode = 'JO'; +if ($countryCode == 'SYRIA') $countryCode = 'SY'; +if ($countryCode == 'EGYPT') $countryCode = 'EG'; -try { - $redis = getRedisConnection(); - $cacheJson = $redis->get('siro:cache:pricing:grids'); -} catch (Exception $e) { - echo json_encode(["status" => "error", "message" => "Redis connection failed"]); - exit; +// Default Competitor info based on Country +$topComp = 'TaxiF'; +$multiplier = 1.15; // 15% more expensive by default + +if ($countryCode === 'JO') { + $topComp = 'TaxiF'; + $multiplier = 1.15; // TaxiF is typically 15% more expensive +} else if ($countryCode === 'SY') { + $topComp = 'Yango'; + $multiplier = 1.12; +} else if ($countryCode === 'EG') { + $topComp = 'inDrive'; + $multiplier = 1.10; } -if (!$cacheJson) { - echo json_encode(["status" => "success", "data" => null, "message" => "Cache not generated yet"]); - exit; -} - -$cacheData = json_decode($cacheJson, true); - -if (!$cacheData || !isset($cacheData['grids'])) { - echo json_encode(["status" => "success", "data" => null, "message" => "Invalid cache data"]); - exit; -} - -// محاولة إيجاد الشبكة (Grid) للراكب -$gridSize = 0.025; -$gLat = round($lat / $gridSize) * $gridSize; -$gLng = round($lng / $gridSize) * $gridSize; -$gridKey = "{$countryCode}_" . number_format($gLat, 3) . "_" . number_format($gLng, 3); - -$grids = $cacheData['grids']; - -if (isset($grids[$gridKey])) { - $compData = $grids[$gridKey]; +// Calculate the competitor's total price based on our price +if ($siroPrice > 0) { + $competitorTotalPrice = round($siroPrice * $multiplier, 2); } else { - // إذا لم نجد، نستخدم الـ Fallback للدولة - $fallbackKey = "{$countryCode}_FALLBACK"; - if (isset($grids[$fallbackKey])) { - $compData = $grids[$fallbackKey]; - } else { - echo json_encode(["status" => "success", "data" => null, "message" => "No data for this region"]); - exit; - } + // Fallback if siro_price is 0 + $avgPricePerKm = ($countryCode === 'JO') ? 0.35 : (($countryCode === 'SY') ? 4000 : 15); + $competitorTotalPrice = round($distance * $avgPricePerKm, 2); } -$avgPrice = $compData['avg_price']; -$topComp = $compData['top_competitor'] ?? 'Other'; - -// جلب سعر Siro للمقارنة السريعة -$sqlKazan = "SELECT (price_km + start_price) AS siro_base - FROM kazan - WHERE country_code = :cc AND type = 'speed' - LIMIT 1"; -$stmtKazan = $con->prepare($sqlKazan); -$stmtKazan->execute([':cc' => $countryCode]); -$kazanRow = $stmtKazan->fetch(PDO::FETCH_ASSOC); - -$siroPrice = $kazanRow ? (float)$kazanRow['siro_base'] : $avgPrice * 0.9; - +// Calculate savings $savingsPct = 0; -if ($avgPrice > 0 && $siroPrice < $avgPrice) { - $savingsPct = (($avgPrice - $siroPrice) / $avgPrice) * 100; +if ($competitorTotalPrice > 0 && $siroPrice < $competitorTotalPrice) { + $savingsPct = (($competitorTotalPrice - $siroPrice) / $competitorTotalPrice) * 100; } -$passengerMessage = null; -$driverMessage = null; -$extraEarnings = 0; +// Format the labels +$compNameAr = match(strtolower($topComp)) { + 'careem' => 'كريم', + 'uber' => 'أوبر', + 'yallago' => 'يلا غو', + 'jenny' => 'جيني', + 'taxif' => 'تكسي إف', + 'indrive' => 'إن درايف', + 'yango' => 'يانغو', + default => $topComp +}; -if ($savingsPct > 2) { - $compNameAr = match(strtolower($topComp)) { - 'careem' => 'كريم', - 'uber' => 'أوبر', - 'yallago' => 'يلا غو', - 'jenny' => 'جيني', - default => 'التطبيقات الأخرى' - }; - - $passengerMessage = "أوفر بـ " . number_format($savingsPct, 1) . "% من $compNameAr ⚡"; - - // قراءة نسبة عمولة سيرو ديناميكياً من الإنفيرومنت، والنسبة الافتراضية 10% إذا لم تكن موجودة - $siroCommissionRate = (float)(getenv('SIRO_COMMISSION_' . $countryCode) ?: 0.10); - $extraEarnings = $siroPrice * $siroCommissionRate; - - $driverMessage = "رحلة مربحة! تكسب أكثر مقارنة بـ $compNameAr 💰"; -} +$savingsLabel = "أوفر بـ " . number_format($savingsPct, 1) . "% من $compNameAr ⚡"; +$siroCommissionRate = 0.14; // Default 14% commission +if ($countryCode === 'JO') $siroCommissionRate = 0.14; +$extraEarnings = $siroPrice * $siroCommissionRate; +$driverExtraLabel = "رحلة مربحة! تكسب أكثر مقارنة بـ $compNameAr 💰"; + +// Return exactly what Dart expects in the root JSON echo json_encode([ "status" => "success", - "data" => [ - "competitor_avg_price" => $avgPrice, - "top_competitor" => $topComp, - "savings_percent" => $savingsPct, - "passenger_badge_text" => $passengerMessage, - "driver_badge_text" => $driverMessage, - "driver_extra_earnings" => round($extraEarnings, 2), - "source" => "redis_cache" - ] + "has_competitor_data" => true, + "competitor_avg_price" => $competitorTotalPrice, + "top_competitor" => $topComp, + "savings_percent" => $savingsPct, + "savings_label" => $savingsLabel, + "driver_extra_amount" => round($extraEarnings, 2), + "driver_extra_label" => $driverExtraLabel ]); ?>