<?php
// تفعيل عرض الأخطاء في PHP لأغراض التطوير
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$pageTitle = 'إدارة مناطق العمل (Zones)';
// تضمين ملف الرأس والوظائف المساعدة
include '../../includes/header.php';

// التحقق من أن المستخدم مسجل الدخول
checkLogin();

// التحقق من صلاحية الوصول إلى هذه الصفحة
if (!hasPermission('manage_zones')) {
    $_SESSION['error_message'] = 'ليس لديك صلاحية لإدارة مناطق العمل.';
    header('Location: ../../index.php');
    exit();
}

$db = getDB();
$zones = [];
$errors = [];
$edit_zone = null;

// التعامل مع إرسال النموذج لإضافة أو تعديل منطقة
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $location_name = trim($_POST['location_name'] ?? '');
    $zone_id = filter_input(INPUT_POST, 'zone_id', FILTER_VALIDATE_INT);
    $zone_data_json = $_POST['zone_data'] ?? null;
    $zone_data = json_decode($zone_data_json, true);

    if (empty($location_name)) {
        $errors[] = 'اسم الموقع مطلوب.';
    }
    if (empty($zone_data_json) || $zone_data === null) {
        $errors[] = 'لم يتم تحديد منطقة على الخريطة.';
    }

    if (empty($errors)) {
        try {
            $zone_type = $zone_data['type'];
            if ($zone_type === 'circle') {
                $center_latitude = $zone_data['lat'];
                $center_longitude = $zone_data['lng'];
                $radius_meters = $zone_data['radius'];
                $coordinates = null;
            } elseif ($zone_type === 'polygon') {
                $center_latitude = null;
                $center_longitude = null;
                $radius_meters = null;
                $coordinates = json_encode($zone_data['points']); // تخزين ككائن JSON
            } else {
                $errors[] = 'نوع المنطقة غير صالح.';
            }

            if (empty($errors)) {
                if ($zone_id) {
                    $result = $db->update(
                        "UPDATE work_locations SET location_name = ?, zone_type = ?, center_latitude = ?, center_longitude = ?, radius_meters = ?, coordinates = ? WHERE id = ?",
                        [$location_name, $zone_type, $center_latitude, $center_longitude, $radius_meters, $coordinates, $zone_id]
                    );
                    if ($result) {
                        $_SESSION['success_message'] = 'تم تحديث منطقة العمل بنجاح.';
                    } else {
                        $errors[] = 'فشل تحديث منطقة العمل.';
                    }
                } else {
                    $result = $db->insert(
                        "INSERT INTO work_locations (location_name, zone_type, center_latitude, center_longitude, radius_meters, coordinates) VALUES (?, ?, ?, ?, ?, ?)",
                        [$location_name, $zone_type, $center_latitude, $center_longitude, $radius_meters, $coordinates]
                    );
                    if ($result) {
                        $_SESSION['success_message'] = 'تمت إضافة منطقة عمل جديدة بنجاح.';
                    } else {
                        $errors[] = 'فشل إضافة منطقة عمل جديدة.';
                    }
                }
                header('Location: manage_zones.php');
                exit();
            }
        } catch (Exception $e) {
            error_log("Database error in manage_zones.php: " . $e->getMessage());
            $errors[] = "حدث خطأ في قاعدة البيانات. يرجى المحاولة لاحقًا.";
        }
    }
}

// التعامل مع طلب الحذف
if (isset($_GET['delete_id']) && is_numeric($_GET['delete_id'])) {
    $delete_id = (int)$_GET['delete_id'];
    try {
        $db->delete("DELETE FROM work_locations WHERE id = ?", [$delete_id]);
        $_SESSION['success_message'] = 'تم حذف منطقة العمل بنجاح.';
    } catch (Exception $e) {
        error_log("Database error deleting zone: " . $e->getMessage());
        $_SESSION['error_message'] = "حدث خطأ أثناء حذف منطقة العمل.";
    }
    header('Location: manage_zones.php');
    exit();
}

// جلب جميع المناطق الموجودة
try {
    $zones = $db->select("SELECT * FROM work_locations ORDER BY id DESC");
} catch (Exception $e) {
    error_log("Database error fetching zones: " . $e->getMessage());
    $_SESSION['error_message'] = "حدث خطأ في قاعدة البيانات. يرجى المحاولة لاحقًا.";
}
?>

<div class="content-area">
    <div class="page-header">
        <h2 class="page-title"><?php echo $pageTitle; ?></h2>
        <p class="page-subtitle">استخدم الخريطة لإضافة أو تعديل المناطق الجغرافية المعتمدة.</p>
    </div>

    <?php
    if (isset($_SESSION['success_message'])) {
        echo '<div class="alert alert-success mt-3">' . htmlspecialchars($_SESSION['success_message']) . '</div>';
        unset($_SESSION['success_message']);
    }
    if (isset($_SESSION['error_message'])) {
        echo '<div class="alert alert-danger mt-3">' . htmlspecialchars($_SESSION['error_message']) . '</div>';
        unset($_SESSION['error_message']);
    }
    if (!empty($errors)) {
        echo '<div class="alert alert-danger mt-3"><ul>';
        foreach ($errors as $error) {
            echo '<li>' . htmlspecialchars($error) . '</li>';
        }
        echo '</ul></div>';
    }
    ?>

    <div class="card mb-4 shadow-sm">
        <div class="card-header">
            <h5 class="card-title mb-0">إضافة/تعديل منطقة عمل</h5>
        </div>
        <div class="card-body">
            <form action="manage_zones.php" method="POST" id="zoneForm">
                <input type="hidden" name="zone_id" id="zone_id" value="">
                <input type="hidden" name="zone_data" id="zone_data">
                <div class="row g-3">
                    <div class="col-12">
                        <label for="location_name" class="form-label">اسم الموقع</label>
                        <input type="text" id="location_name" name="location_name" class="form-control" required>
                    </div>
                    <div class="col-12">
                        <label class="form-label">رسم المنطقة على الخريطة</label>
                        <div id="map"></div>
                        <p class="text-muted mt-2">
                            استخدم أدوات الرسم في أعلى اليمين لرسم دائرة أو مضلع يمثل منطقة العمل.
                        </p>
                    </div>
                    <div class="col-12 mt-4 text-start">
                        <button type="submit" class="btn btn-primary me-2" id="saveZoneBtn">
                            <i class="fas fa-save me-2"></i> حفظ المنطقة
                        </button>
                        <button type="button" class="btn btn-secondary" id="locateMeBtn">
                            <i class="fas fa-crosshairs me-2"></i> انتقل إلى موقعي الحالي
                        </button>
                    </div>
                </div>
            </form>
        </div>
    </div>

    <div class="card mb-4 shadow-sm">
        <div class="card-header">
            <h5 class="card-title mb-0">المناطق المعتمدة</h5>
        </div>
        <div class="card-body">
            <?php if (empty($zones)): ?>
                <div class="alert alert-info text-center">لا توجد مناطق عمل مسجلة حاليًا.</div>
            <?php else: ?>
                <div class="table-responsive">
                    <table class="table table-hover table-bordered">
                        <thead class="table-light">
                            <tr>
                                <th>#</th>
                                <th>اسم الموقع</th>
                                <th>النوع</th>
                                <th>الإحداثيات</th>
                                <th>الإجراءات</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($zones as $index => $zone): ?>
                                <tr>
                                    <td><?php echo htmlspecialchars($index + 1); ?></td>
                                    <td><?php echo htmlspecialchars($zone['location_name']); ?></td>
                                    <td>
                                        <?php
                                            if ($zone['zone_type'] === 'circle') {
                                                echo '<span class="badge bg-primary">دائرة</span>';
                                            } elseif ($zone['zone_type'] === 'polygon') {
                                                echo '<span class="badge bg-info">مضلع</span>';
                                            }
                                        ?>
                                    </td>
                                    <td>
                                        <?php
                                            if ($zone['zone_type'] === 'circle') {
                                                echo 'المركز: ' . htmlspecialchars($zone['center_latitude'] . ', ' . $zone['center_longitude']) . '<br>';
                                                echo 'نصف القطر: ' . htmlspecialchars($zone['radius_meters']) . ' م';
                                            } elseif ($zone['zone_type'] === 'polygon') {
                                                echo 'عدة نقاط (مضلع)';
                                            }
                                        ?>
                                    </td>
                                    <td>
                                        <div class="btn-group btn-group-sm">
                                            <a href="manage_zones.php?delete_id=<?php echo htmlspecialchars($zone['id']); ?>" class="btn btn-outline-danger" title="حذف" onclick="return confirm('هل أنت متأكد من حذف هذه المنطقة؟');">
                                                <i class="fas fa-trash"></i>
                                            </a>
                                        </div>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.js"></script>

<style>
    #map {
        width: 100%;
        height: 500px;
        border: 2px solid #ddd;
        border-radius: 8px;
    }
</style>

<script>
    document.addEventListener('DOMContentLoaded', function() {
        var map = L.map('map').setView([33.3152, 44.3661], 12); // بغداد افتراضي
        var userMarker = null; // Variable to hold the user's location marker

        // إضافة طبقة الخريطة الأساسية
        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
            attribution: '&copy; OpenStreetMap contributors'
        }).addTo(map);

        var drawnItems = new L.FeatureGroup();
        map.addLayer(drawnItems);

        var drawControl = new L.Control.Draw({
            edit: { featureGroup: drawnItems },
            draw: { polygon: true, circle: true, rectangle: false, marker: false, polyline: false }
        });
        map.addControl(drawControl);

        // عند إنشاء شكل جديد
        map.on(L.Draw.Event.CREATED, function (event) {
            var layer = event.layer;
            var type = event.layerType;
            drawnItems.clearLayers();
            drawnItems.addLayer(layer);

            var zoneData = {};
            if (type === 'circle') {
                zoneData = {
                    type: 'circle',
                    lat: layer.getLatLng().lat,
                    lng: layer.getLatLng().lng,
                    radius: layer.getRadius()
                };
            } else if (type === 'polygon') {
                var latLngs = layer.getLatLngs()[0];
                var points = latLngs.map(function(latLng) {
                    return {lat: latLng.lat, lng: latLng.lng};
                });
                zoneData = { type: 'polygon', points: points };
            }

            document.getElementById('zone_data').value = JSON.stringify(zoneData);
        });

        // عرض المناطق الموجودة
        var existingZones = <?php echo json_encode($zones); ?>;
        existingZones.forEach(function(zone) {
            if (zone.zone_type === 'circle') {
                var circle = L.circle([zone.center_latitude, zone.center_longitude], {
                    radius: zone.radius_meters,
                    color: 'blue'
                }).addTo(map);
                circle.bindPopup('<b>' + zone.location_name + '</b><br>نصف القطر: ' + zone.radius_meters + ' م');
            } else if (zone.zone_type === 'polygon' && zone.coordinates) {
                try {
                    var coordinates = JSON.parse(zone.coordinates);
                    var latLngs = coordinates.map(p => [p.lat, p.lng]);
                    var polygon = L.polygon(latLngs, { color: 'red' }).addTo(map);
                    polygon.bindPopup('<b>' + zone.location_name + '</b>');
                } catch (e) {
                    console.error('فشل في تحليل إحداثيات المضلع:', e);
                }
            }
        });

        // NEW: Function to handle the "Go to My Location" button
        document.getElementById('locateMeBtn').addEventListener('click', function() {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function(position) {
                    var lat = position.coords.latitude;
                    var lng = position.coords.longitude;
                    var userLatLng = [lat, lng];

                    // Move map view to user's location
                    map.setView(userLatLng, 16);

                    // Add a marker to the user's location
                    if (userMarker) {
                        map.removeLayer(userMarker);
                    }
                    userMarker = L.marker(userLatLng).addTo(map)
                        .bindPopup('أنت هنا').openPopup();

                }, function(error) {
                    alert('فشل في تحديد موقعك: ' + error.message);
                }, {
                    enableHighAccuracy: true,
                    timeout: 10000,
                    maximumAge: 0
                });
            } else {
                alert('المتصفح لا يدعم تحديد الموقع الجغرافي.');
            }
        });
    });
</script>

<?php include '../../includes/footer.php'; ?>