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

$pageTitle = 'سجل الحضور والانصراف الكامل';
include '../../includes/header.php';

// يجب أن تكون هذه الدوال (checkLogin, hasPermission, getDB) معرفة في الملفات المضمنة
checkLogin();

if (!hasPermission('view_attendance_log')) {
  $_SESSION['error_message'] = 'ليس لديك صلاحية لعرض سجل الحضور.';
  header('Location: ../../index.php');
  exit();
}

$db = getDB();
$attendance_records = [];
$total_records = 0;

// تحديد عدد السجلات في كل صفحة
$limit = 20;
// الحصول على رقم الصفحة الحالية من الرابط (URL)، إذا لم يكن موجوداً تكون الصفحة الأولى
$page = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1;
// حساب الإزاحة (offset) لقاعدة البيانات
$offset = ($page - 1) * $limit;

// متغيرات الفلترة
$employee_id_filter = $_GET['employee_id'] ?? null;
$start_date_filter = $_GET['start_date'] ?? null;
$end_date_filter = $_GET['end_date'] ?? null;

// جلب قائمة الموظفين
$employees_list = $db->select("SELECT id, full_name FROM employees ORDER BY full_name ASC");

// بناء جملة WHERE
$where_clauses = [];
$params = [];

if ($employee_id_filter) {
  $where_clauses[] = "ea.employee_id = ?";
  $params[] = $employee_id_filter;
}
if ($start_date_filter) {
  $where_clauses[] = "DATE(ea.timestamp) >= ?";
  $params[] = $start_date_filter;
}
if ($end_date_filter) {
  $where_clauses[] = "DATE(ea.timestamp) <= ?";
  $params[] = $end_date_filter;
}

$filter_where = count($where_clauses) > 0 ? "WHERE " . implode(" AND ", $where_clauses) : "";

try {
  // جلب إجمالي عدد السجلات
  $total_records_result = $db->select("SELECT COUNT(ea.id) AS total FROM employee_attendance ea {$filter_where}", $params);
  $total_records = $total_records_result[0]['total'];
  // حساب إجمالي عدد الصفحات
  $total_pages = ceil($total_records / $limit);

  // التأكد من أن رقم الصفحة لا يتجاوز إجمالي الصفحات
  if ($page > $total_pages && $total_pages > 0) {
    $page = $total_pages;
    $offset = ($page - 1) * $limit;
  } elseif ($page < 1) {
    $page = 1;
    $offset = 0;
  }

  // جلب السجلات المفلترة مع تحديد LIMIT و OFFSET
  $sql = "
    SELECT
      ea.*,
      e.full_name AS employee_name,
      e.position
    FROM
      employee_attendance ea
    JOIN
      employees e ON ea.employee_id = e.id
    {$filter_where}
    ORDER BY
      ea.timestamp DESC
    LIMIT ? OFFSET ?
  ";
 
  $params_query = array_merge($params, [$limit, $offset]);
  $attendance_records = $db->select($sql, $params_query);

} catch (Exception $e) {
  error_log("Database error in view_all_attendance.php: " . $e->getMessage());
  $_SESSION['error_message'] = "حدث خطأ في قاعدة البيانات. يرجى المحاولة لاحقًا.";
}
?>

<div class="content-area">
  <div class="page-header d-flex justify-content-between align-items-center">
    <h2 class="page-title"><?php echo $pageTitle; ?></h2>
    <div>
      <a href="view_attendance.php" class="btn btn-secondary">العودة إلى الحضور اليومي <i class="fas fa-calendar-day ms-2"></i></a>
    </div>
  </div>
 
  <?php if (isset($_SESSION['error_message'])): ?>
    <div class="alert alert-danger mt-3"><?php echo htmlspecialchars($_SESSION['error_message']); unset($_SESSION['error_message']); ?></div>
  <?php endif; ?>

  <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="" method="GET">
        <div class="row g-3">
          <div class="col-md-4">
            <label for="employee_id" class="form-label">الموظف</label>
            <select id="employee_id" name="employee_id" class="form-select">
              <option value="">جميع الموظفين</option>
              <?php foreach ($employees_list as $employee): ?>
                <option value="<?php echo htmlspecialchars($employee['id']); ?>" <?php echo ($employee_id_filter == $employee['id']) ? 'selected' : ''; ?>>
                  <?php echo htmlspecialchars($employee['full_name']); ?>
                </option>
              <?php endforeach; ?>
            </select>
          </div>
          <div class="col-md-4">
            <label for="start_date" class="form-label">من تاريخ</label>
            <input type="date" id="start_date" name="start_date" class="form-control" value="<?php echo htmlspecialchars($start_date_filter); ?>">
          </div>
          <div class="col-md-4">
            <label for="end_date" class="form-label">إلى تاريخ</label>
            <input type="date" id="end_date" name="end_date" class="form-control" value="<?php echo htmlspecialchars($end_date_filter); ?>">
          </div>
          <div class="col-12 text-end">
            <button type="submit" class="btn btn-primary"><i class="fas fa-filter me-2"></i>تطبيق الفلاتر</button>
            <a href="view_all_attendance.php" class="btn btn-outline-secondary"><i class="fas fa-times me-2"></i>مسح الفلاتر</a>
          </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($attendance_records)): ?>
        <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>
                <th>الموقع</th>
                <th>ملاحظات</th>
              </tr>
            </thead>
            <tbody>
              <?php foreach ($attendance_records as $index => $record): ?>
                <tr>
                  <td><?php echo htmlspecialchars((($page - 1) * $limit) + $index + 1); ?></td>
                  <td><?php echo htmlspecialchars($record['employee_name']); ?></td>
                  <td><?php echo htmlspecialchars($record['position']); ?></td>
                  <td>
                    <?php
                      if ($record['attendance_type'] == 'check_in') {
                        echo '<span class="badge bg-success">حضور</span>';
                      } else {
                        echo '<span class="badge bg-danger">انصراف</span>';
                      }
                    ?>
                  </td>
                  <td><?php echo htmlspecialchars($record['timestamp']); ?></td>
                  <td>
                    <?php if (!empty($record['latitude']) && !empty($record['longitude'])): ?>
                      <a href="http://maps.google.com/?q=<?php echo urlencode($record['latitude'] . ',' . $record['longitude']); ?>" target="_blank" title="عرض الموقع على الخريطة">
                        <i class="fas fa-map-marker-alt"></i> عرض الموقع
                      </a>
                    <?php else: ?>
                      غير متوفر
                    <?php endif; ?>
                  </td>
                  <td><?php echo htmlspecialchars($record['notes'] ?? ''); ?></td>
                </tr>
              <?php endforeach; ?>
            </tbody>
          </table>
        </div>

        <?php if ($total_pages > 1): ?>
        <nav aria-label="Page navigation">
          <ul class="pagination justify-content-center mt-4">
            <?php
            // بناء متغيرات الفلترة للاستخدام في الروابط
            $filter_params = http_build_query([
              'employee_id' => $employee_id_filter,
              'start_date' => $start_date_filter,
              'end_date' => $end_date_filter
            ]);
            
                        // ** بداية منطق ترقيم الصفحات المحدود **
                        $max_links = 5; // عدد روابط الصفحات المراد عرضها كحد أقصى

                        // تحديد الصفحة الأولى التي يجب عرضها
                        $start_page = max(1, $page - floor($max_links / 2));
                        
                        // تحديد الصفحة الأخيرة التي يجب عرضها
                        $end_page = min($total_pages, $start_page + $max_links - 1);

                        // تعديل صفحة البداية مرة أخرى في حال كنا قرب النهاية
                        if ($end_page - $start_page + 1 < $max_links) {
                            $start_page = max(1, $end_page - $max_links + 1);
                        }
                        // ** نهاية منطق ترقيم الصفحات المحدود **
                        ?>

                        <li class="page-item <?php echo ($page <= 1) ? 'disabled' : ''; ?>">
              <a class="page-link" href="?page=<?php echo $page - 1; ?>&<?php echo $filter_params; ?>">السابق</a>
            </li>

                        <?php
                        // عرض الصفحة 1 ونقاط القطع إذا لم تكن ضمن النطاق
                        if ($start_page > 1) {
                            echo '<li class="page-item"><a class="page-link" href="?page=1&' . $filter_params . '">1</a></li>';
                            if ($start_page > 2) {
                                echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
                            }
                        }
                        ?>

                        <?php for ($i = $start_page; $i <= $end_page; $i++): ?>
              <li class="page-item <?php echo ($page === $i) ? 'active' : ''; ?>">
                <a class="page-link" href="?page=<?php echo $i; ?>&<?php echo $filter_params; ?>"><?php echo $i; ?></a>
              </li>
            <?php endfor; ?>

                        <?php
                        // عرض نقاط القطع والصفحة الأخيرة إذا لم تكن ضمن النطاق
                        if ($end_page < $total_pages) {
                            if ($end_page < $total_pages - 1) {
                                echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
                            }
                            echo '<li class="page-item"><a class="page-link" href="?page=' . $total_pages . '&' . $filter_params . '">' . $total_pages . '</a></li>';
                        }
                        ?>
                        
                        <li class="page-item <?php echo ($page >= $total_pages) ? 'disabled' : ''; ?>">
              <a class="page-link" href="?page=<?php echo $page + 1; ?>&<?php echo $filter_params; ?>">التالي</a>
            </li>
          </ul>
        </nav>
        <?php endif; ?>
      <?php endif; ?>
    </div>
  </div>
</div>

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