<?php
// activity_log.php - سجل الأنشطة الشامل
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$pageTitle = 'سجل الأنشطة';
require_once '../../includes/header.php';

checkLogin();
$db = getDB();
if (!hasPermission('view_users')) {
    $_SESSION['error_message'] = 'ليس لديك صلاحية لعرض هذه الصفحة.';
    header('Location: ../../index.php');
    exit();
}
// --- جلب أسماء الجداول الفريدة لملء قائمة الفلاتر ---
$tableSql = "SELECT DISTINCT table_name FROM log_file ORDER BY table_name ASC";
$availableTables = $db->select($tableSql);

// --- فلاتر البحث ---
$employeeNameFilter = htmlspecialchars($_GET['employee_name'] ?? '');
$operationFilter = htmlspecialchars($_GET['operation_type'] ?? '');
$tableFilter = htmlspecialchars($_GET['table_name'] ?? '');
$dateFrom = htmlspecialchars($_GET['date_from'] ?? '');
$dateTo = htmlspecialchars($_GET['date_to'] ?? '');

// --- إعداد الباجينغ ---
$perPage = 20;
$currentPage = max(1, intval($_GET['page'] ?? 1));
$offset = ($currentPage - 1) * $perPage;

// --- بناء شرط البحث ---
$whereClauses = [];
$params = [];

if (!empty($employeeNameFilter)) {
    $whereClauses[] = "u.full_name LIKE ?";
    $params[] = "%$employeeNameFilter%";
}

// 💡 التعديل هنا: تحويل نوع العملية من عربي/إنجليزي إلى القيمة الإنجليزية المخزنة في DB
if (!empty($operationFilter)) {
    // التحويل إلى القيمة الإنجليزية المخزنة في قاعدة البيانات
    $dbOperationType = match(strtoupper($operationFilter)) {
        'إضافة', 'إضافة' => 'إضافة',
        'تعديل', 'تعديل' => 'تعديل',
        'حذف', 'حذف' => 'حذف',
        default => '', // في حالة قيمة غير معروفة، نجعلها فارغة لتجنب البحث الخاطئ
    };
    
    if (!empty($dbOperationType)) {
        $whereClauses[] = "l.operation_type = ?";
        $params[] = $dbOperationType;
    }
}

if (!empty($tableFilter)) {
    $whereClauses[] = "l.table_name = ?";
    $params[] = $tableFilter;
}
if (!empty($dateFrom)) {
    $whereClauses[] = "DATE(l.modified_at) >= ?";
    $params[] = $dateFrom;
}
if (!empty($dateTo)) {
    $whereClauses[] = "DATE(l.modified_at) <= ?";
    $params[] = $dateTo;
}

$whereSQL = !empty($whereClauses) ? 'WHERE ' . implode(' AND ', $whereClauses) : '';

// --- جلب عدد السجلات الكلي ---
$countSql = "SELECT COUNT(*) as total FROM log_file l LEFT JOIN users u ON l.modified_by = u.id $whereSQL";
$totalRows = $db->selectOne($countSql, $params)['total'];
$totalPages = ceil($totalRows / $perPage);

// --- جلب بيانات الصفحة الحالية ---
$sql = "
    SELECT l.id, l.table_name, l.record_id, l.operation_type, l.old_data, l.new_data,
           l.modified_at, u.full_name AS modified_by_name
    FROM log_file l
    LEFT JOIN users u ON l.modified_by = u.id
    $whereSQL
    ORDER BY l.modified_at DESC
    LIMIT $perPage OFFSET $offset
";
$logs = $db->select($sql, $params);

// --- ترجمة نوع العملية للعربي وإضافة صنف (كلاس) للون ---
function translateOperation($op) {
    return match($op) {
        'INSERT' => ['label' => 'إضافة', 'class' => 'success'],
        'تعديل' => ['label' => 'تعديل', 'class' => 'primary'],
        'حذف' => ['label' => 'حذف', 'class' => 'danger'],
        default => ['label' => $op, 'class' => 'secondary']
    };
}
?>

<div class="container py-5">
    <div class="card shadow-sm mb-4 bg-light border-0">
        <div class="card-body d-flex align-items-center justify-content-between">
            <h2 class="h4 mb-0 text-dark"><i class="bi bi-journal-check me-2"></i> سجل الأنشطة الشامل</h2>
            <span class="badge bg-secondary-subtle text-secondary-emphasis rounded-pill">إجمالي السجلات: <?php echo $totalRows; ?></span>
        </div>
    </div>

    <hr class="my-4">

    <div class="card shadow-sm mb-4">
        <div class="card-header bg-white">
            <h5 class="mb-0 card-title h6 text-primary">خيارات البحث والتصفية</h5>
        </div>
        <div class="card-body">
            <form method="GET" class="row g-3 align-items-end">
                
                <div class="col-lg-3 col-md-6">
                    <label for="employee_name" class="form-label small">اسم الموظف</label>
                    <input type="text" id="employee_name" name="employee_name" class="form-control" placeholder="ابحث باسم الموظف" value="<?php echo htmlspecialchars($employeeNameFilter); ?>">
                </div>

                <div class="col-lg-3 col-md-6">
                    <label for="table_name" class="form-label small">اسم الجدول</label>
                    <select id="table_name" name="table_name" class="form-select">
                        <option value="">-- الكل --</option>
                        <?php foreach($availableTables as $table): ?>
                            <option value="<?php echo htmlspecialchars($table['table_name']); ?>" <?php if($tableFilter == $table['table_name']) echo 'selected'; ?>>
                                <?php echo htmlspecialchars($table['table_name']); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                
                <div class="col-lg-3 col-md-6">
                    <label for="operation_type" class="form-label small">نوع العملية</label>
                    <select id="operation_type" name="operation_type" class="form-select">
                        <option value="">-- الكل --</option>
                        <option value="INSERT" <?php if($operationFilter=='INSERT') echo 'selected'; ?>>إضافة</option>
                        <option value="تعديل" <?php if($operationFilter=='تعديل') echo 'selected'; ?>>تعديل</option>
                        <option value="حذف" <?php if($operationFilter=='حذف') echo 'selected'; ?>>حذف</option>
                    </select>
                </div>
                
                <div class="col-lg-3 col-md-6">
                    <label for="date_range" class="form-label small">التاريخ (من - إلى)</label>
                    <div class="input-group">
                        <input type="date" id="date_from" name="date_from" class="form-control" title="من تاريخ" value="<?php echo htmlspecialchars($dateFrom); ?>">
                        <input type="date" id="date_to" name="date_to" class="form-control" title="إلى تاريخ" value="<?php echo htmlspecialchars($dateTo); ?>">
                    </div>
                </div>

                <div class="col-12 d-flex justify-content-end gap-2">
                    <button type="submit" class="btn btn-primary"><i class="bi bi-search"></i> بحث وتصفية</button>
                    <a href="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" class="btn btn-outline-secondary"><i class="bi bi-arrow-clockwise"></i> مسح الفلاتر</a>
                </div>
            </form>
        </div>
    </div>

    <div class="card shadow-lg">
        <div class="card-body p-0">
            <div class="table-responsive">
                <table class="table table-hover table-sm mb-0">
                    <thead class="table-dark">
                        <tr>
                            <th style="width: 5%;">#</th>
                            <th style="width: 15%;">الجدول</th>
                            <th style="width: 10%;">معرف السجل</th>
                            <th style="width: 15%;"><i class="bi bi-wrench-adjustable"></i> العملية</th>
                            <th style="width: 25%;"><i class="bi bi-file-earmark-diff"></i> التغيرات</th>
                            <th style="width: 15%;"><i class="bi bi-person-fill"></i> المسؤول</th>
                            <th style="width: 15%;"><i class="bi bi-clock-fill"></i> تاريخ التعديل</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (!empty($logs)): ?>
                            <?php foreach ($logs as $log):
                                $op_info = translateOperation($log['operation_type']);
                                // تجهيز بيانات JSON كـ string محمي للتمرير عبر سمات البيانات
                                $old_data_escaped = htmlspecialchars(json_encode(json_decode($log['old_data'] ?? '{}'), JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT), ENT_QUOTES, 'UTF-8');
                                $new_data_escaped = htmlspecialchars(json_encode(json_decode($log['new_data'] ?? '{}'), JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT), ENT_QUOTES, 'UTF-8');
                            ?>
                                <tr>
                                    <td><?php echo $log['id']; ?></td>
                                    <td><span class="badge bg-info-subtle text-info-emphasis"><?php echo htmlspecialchars($log['table_name']); ?></span></td>
                                    <td><?php echo $log['record_id']; ?></td>
                                    <td><span class="badge bg-<?php echo $op_info['class']; ?> text-white"><?php echo $op_info['label']; ?></span></td>
                                    <td>
                                        <button type="button" 
                                                class="btn btn-sm btn-outline-info view-details-btn" 
                                                data-bs-toggle="modal" 
                                                data-bs-target="#logDetailsModal"
                                                data-id="<?php echo $log['id']; ?>"
                                                data-table="<?php echo htmlspecialchars($log['table_name']); ?>"
                                                data-recordid="<?php echo $log['record_id']; ?>"
                                                data-oplabel="<?php echo $op_info['label']; ?>"
                                                data-opclass="<?php echo $op_info['class']; ?>"
                                                data-by="<?php echo htmlspecialchars($log['modified_by_name'] ?? 'غير معروف'); ?>"
                                                data-at="<?php echo $log['modified_at']; ?>"
                                                data-old='<?php echo $old_data_escaped; ?>'
                                                data-new='<?php echo $new_data_escaped; ?>'>
                                            <i class="bi bi-eye me-1"></i> عرض التفاصيل
                                        </button>
                                    </td>
                                    <td><?php echo htmlspecialchars($log['modified_by_name'] ?? 'غير معروف'); ?></td>
                                    <td><?php echo date("Y-m-d H:i", strtotime($log['modified_at'])); ?></td>
                                </tr>
                            <?php endforeach; ?>
                        <?php else: ?>
                            <tr>
                                <td colspan="7" class="text-center py-5 text-muted">
                                    <i class="bi bi-exclamation-triangle-fill me-2 fs-4"></i>
                                    <p class="mb-0">لا توجد سجلات أنشطة مطابقة للمعايير المحددة.</p>
                                    <p class="small">حاول توسيع نطاق البحث أو مسح الفلاتر.</p>
                                </td>
                            </tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <div class="d-flex justify-content-between align-items-center mt-4">
        <div class="small text-muted">
            <?php echo $totalRows > 0 ? "عرض " . count($logs) . " من أصل " . $totalRows . " سجل. (الصفحة " . $currentPage . " من " . $totalPages . ")" : "لا توجد سجلات لعرضها."; ?>
        </div>
        </div>
</div>

<div class="modal fade" id="logDetailsModal" tabindex="-1" aria-labelledby="logDetailsModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-xl modal-dialog-scrollable">
        <div class="modal-content">
            <div class="modal-header bg-primary text-white">
                <h5 class="modal-title" id="logDetailsModalLabel"><i class="bi bi-info-circle-fill me-2"></i> تفاصيل السجل </h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <p class="h6 mb-3">
                    <span id="modal-op-badge" class="badge me-2"></span>
                    على الجدول: <strong id="modal-table-name" class="text-info"></strong> (ID: <span id="modal-record-id"></span>)
                </p>
                <p class="small text-muted border-bottom pb-2">
                    المسؤول: <strong id="modal-modified-by"></strong> في: <span id="modal-modified-at"></span>
                </p>

                <div class="row">
                    <div class="col-md-6">
                        <div class="card border-danger mb-3">
                            <div class="card-header bg-danger text-white fw-bold">البيانات القديمة (قبل العملية)</div>
                            <div class="card-body p-2">
                                <pre id="modal-old-data" class="small text-start p-2 rounded" style="max-height: 400px; overflow: auto; white-space: pre-wrap; background-color: #ffeaea; word-wrap: break-word; font-family: monospace; direction: ltr;"></pre>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="card border-success mb-3">
                            <div class="card-header bg-success text-white fw-bold">البيانات الجديدة (بعد العملية)</div>
                            <div class="card-body p-2">
                                <pre id="modal-new-data" class="small text-start p-2 rounded" style="max-height: 400px; overflow: auto; white-space: pre-wrap; background-color: #eafaea; word-wrap: break-word; font-family: monospace; direction: ltr;"></pre>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
            </div>
        </div>
    </div>
</div>

<script>
    document.addEventListener('DOMContentLoaded', function () {
        var detailsModal = document.getElementById('logDetailsModal');
        // تأكد من أن الـ Modal موجود قبل ربط الحدث
        if (detailsModal) {
            detailsModal.addEventListener('show.bs.modal', function (event) {
                var button = event.relatedTarget;
                
                // قراءة البيانات من سمات الزر
                var logId = button.getAttribute('data-id');
                var tableName = button.getAttribute('data-table');
                var recordId = button.getAttribute('data-recordid');
                var opLabel = button.getAttribute('data-oplabel');
                var opClass = button.getAttribute('data-opclass');
                var modifiedBy = button.getAttribute('data-by');
                var modifiedAt = button.getAttribute('data-at');
                var oldData = button.getAttribute('data-old');
                var newData = button.getAttribute('data-new');

                // تعبئة البيانات في Modal
                detailsModal.querySelector('#logDetailsModalLabel').innerHTML = '<i class="bi bi-info-circle-fill me-2"></i> تفاصيل السجل رقم #' + logId;
                
                var opBadge = detailsModal.querySelector('#modal-op-badge');
                opBadge.textContent = opLabel;
                // تحديث كلاس اللون
                opBadge.className = 'badge me-2 text-white bg-' + opClass; 
                
                detailsModal.querySelector('#modal-table-name').textContent = tableName;
                detailsModal.querySelector('#modal-record-id').textContent = recordId;
                detailsModal.querySelector('#modal-modified-by').textContent = modifiedBy;
                detailsModal.querySelector('#modal-modified-at').textContent = modifiedAt;
                
                // تعبئة البيانات JSON في وسم <pre>
                detailsModal.querySelector('#modal-old-data').textContent = oldData;
                detailsModal.querySelector('#modal-new-data').textContent = newData;
            });
        }
    });
</script>

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