<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
// Handle preflight requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
exit(0);
}
include_once 'includes/db.php';
// Egyptian cities with approximate coordinates
$egyptianCities = [
'القاهرة' => ['lat' => 30.0444, 'lng' => 31.2357],
'الجيزة' => ['lat' => 30.0131, 'lng' => 31.2089],
'الإسكندرية' => ['lat' => 31.2001, 'lng' => 29.9187],
'الشرقية' => ['lat' => 30.5965, 'lng' => 31.5041],
'المنوفية' => ['lat' => 30.5972, 'lng' => 30.9876],
'القليوبية' => ['lat' => 30.1792, 'lng' => 31.2045],
'كفر الشيخ' => ['lat' => 31.1107, 'lng' => 30.9388],
'الغربية' => ['lat' => 30.8754, 'lng' => 31.0364],
'المنيا' => ['lat' => 28.0871, 'lng' => 30.7618],
'بني سويف' => ['lat' => 29.0661, 'lng' => 31.0994],
'الفيوم' => ['lat' => 29.2985, 'lng' => 30.8418],
'أسيوط' => ['lat' => 27.1809, 'lng' => 31.1837],
'سوهاج' => ['lat' => 26.5569, 'lng' => 31.6948],
'قنا' => ['lat' => 26.1551, 'lng' => 32.7160],
'الأقصر' => ['lat' => 25.6872, 'lng' => 32.6396],
'أسوان' => ['lat' => 24.0889, 'lng' => 32.8998],
'البحر الأحمر' => ['lat' => 26.0667, 'lng' => 33.8116],
'الوادي الجديد' => ['lat' => 25.4518, 'lng' => 30.5414],
'مطروح' => ['lat' => 31.3543, 'lng' => 27.2373],
'شمال سيناء' => ['lat' => 31.1342, 'lng' => 33.8059],
'جنوب سيناء' => ['lat' => 28.4693, 'lng' => 33.9715],
'دمياط' => ['lat' => 31.8133, 'lng' => 31.8067],
'الدقهلية' => ['lat' => 31.0409, 'lng' => 31.3785],
'بورسعيد' => ['lat' => 31.2653, 'lng' => 32.3019],
'الإسماعيلية' => ['lat' => 30.5965, 'lng' => 32.2715],
'السويس' => ['lat' => 29.9668, 'lng' => 32.5498]
];
// Function to calculate distance between two points
function calculateDistance($lat1, $lon1, $lat2, $lon2) {
$earthRadius = 6371;
$dLat = deg2rad($lat2 - $lat1);
$dLon = deg2rad($lon2 - $lon1);
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
return $earthRadius * $c;
}
$input = json_decode(file_get_contents('php://input'), true);
if (!isset($input['city'])) {
echo json_encode([
'success' => false,
'message' => 'الرجاء تحديد المحافظة'
]);
exit;
}
$selectedCity = $input['city'];
if (!isset($egyptianCities[$selectedCity])) {
echo json_encode([
'success' => false,
'message' => 'المحافظة غير موجودة'
]);
exit;
}
$cityCoords = $egyptianCities[$selectedCity];
try {
// Get all branches from database
$sql = "SELECT id, name, address, phone, lat, lng FROM branches WHERE lat IS NOT NULL AND lng IS NOT NULL";
$result = $conn->query($sql);
if ($result->num_rows == 0) {
echo json_encode([
'success' => false,
'message' => 'لا توجد فروع متاحة حالياً'
]);
exit;
}
$nearestBranch = null;
$minDistance = PHP_FLOAT_MAX;
// Calculate distance to each branch
while ($branch = $result->fetch_assoc()) {
$distance = calculateDistance(
$cityCoords['lat'],
$cityCoords['lng'],
floatval($branch['lat']),
floatval($branch['lng'])
);
if ($distance < $minDistance) {
$minDistance = $distance;
$nearestBranch = $branch;
$nearestBranch['distance'] = round($distance, 2);
}
}
if ($nearestBranch) {
echo json_encode([
'success' => true,
'branch' => [
'name' => $nearestBranch['name'],
'address' => $nearestBranch['address'],
'phone' => $nearestBranch['phone'],
'distance' => $nearestBranch['distance']
]
]);
} else {
echo json_encode([
'success' => false,
'message' => 'لم يتم العثور على فروع قريبة'
]);
}
} catch (Exception $e) {
echo json_encode([
'success' => false,
'message' => 'حدث خطأ في النظام'
]);
}
$conn->close();
?>