<?php
session_start();
require_once 'config/db_config.php';
require_once 'includes/activity_log.php';

// Ensure user is logged in and has a branch_id
if (!isset($_SESSION['user_id']) || !isset($_SESSION['branch_id'])) {
    header("Location: login.php");
    exit();
}

$branch_id = $_SESSION['branch_id'];
$user_role = $_SESSION['role'] ?? 'staff';

// Pagination
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 20;
$offset = ($page - 1) * $limit;

// Filters
$action_filter = $_GET['action_type'] ?? '';
$user_filter = $_GET['user_id'] ?? '';
$date_from = $_GET['date_from'] ?? '';
$date_to = $_GET['date_to'] ?? '';

try {
    // Build query with filters
    $sql = "
        SELECT 
            a.*,
            u.username,
            u.full_name,
            u.role,
            b.branch_name
        FROM activity_log a
        LEFT JOIN users u ON a.user_id = u.user_id
        LEFT JOIN branches b ON a.branch_id = b.branch_id
        WHERE a.branch_id = :branch_id 
           OR (a.branch_id IS NULL AND a.user_id IN (
               SELECT user_id FROM users WHERE branch_id = :branch_id2
           ))
    ";
    
    $count_sql = "
        SELECT COUNT(*) as total 
        FROM activity_log a
        LEFT JOIN users u ON a.user_id = u.user_id
        WHERE a.branch_id = :branch_id 
           OR (a.branch_id IS NULL AND a.user_id IN (
               SELECT user_id FROM users WHERE branch_id = :branch_id2
           ))
    ";
    
    $params = ['branch_id' => $branch_id, 'branch_id2' => $branch_id];
    
    // Apply filters
    if (!empty($action_filter)) {
        $sql .= " AND a.action_type = :action_type";
        $count_sql .= " AND a.action_type = :action_type";
        $params[':action_type'] = $action_filter;
    }
    
    if (!empty($user_filter)) {
        $sql .= " AND a.user_id = :user_id";
        $count_sql .= " AND a.user_id = :user_id";
        $params[':user_id'] = $user_filter;
    }
    
    if (!empty($date_from)) {
        $sql .= " AND DATE(a.created_at) >= :date_from";
        $count_sql .= " AND DATE(a.created_at) >= :date_from";
        $params[':date_from'] = $date_from;
    }
    
    if (!empty($date_to)) {
        $sql .= " AND DATE(a.created_at) <= :date_to";
        $count_sql .= " AND DATE(a.created_at) <= :date_to";
        $params[':date_to'] = $date_to;
    }
    
    // Get total count for pagination
    $stmt = $pdo->prepare($count_sql);
    $stmt->execute($params);
    $total_records = $stmt->fetch()['total'];
    $total_pages = ceil($total_records / $limit);
    
    // Get paginated results
    $sql .= " ORDER BY a.created_at DESC LIMIT :offset, :limit";
    $stmt = $pdo->prepare($sql);
    
    foreach ($params as $key => $value) {
        $stmt->bindValue($key, $value);
    }
    $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
    $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
    $stmt->execute();
    
    $activities = $stmt->fetchAll();
    
    // Get unique users for filter dropdown
    $stmt = $pdo->prepare("
        SELECT DISTINCT u.user_id, u.username, u.full_name 
        FROM users u 
        WHERE u.branch_id = :branch_id OR u.role = 'admin'
        ORDER BY u.full_name
    ");
    $stmt->execute(['branch_id' => $branch_id]);
    $users = $stmt->fetchAll();
    
} catch (PDOException $e) {
    die("Error fetching activities: " . $e->getMessage());
}

// Function to get icon for action type
function getActionIcon($action_type) {
    $icons = [
        'LOGIN' => 'ri-login-circle-line',
        'LOGOUT' => 'ri-logout-circle-line',
        'CREATE' => 'ri-add-circle-line',
        'UPDATE' => 'ri-edit-line',
        'DELETE' => 'ri-delete-bin-line',
        'VIEW' => 'ri-eye-line',
        'EXPORT' => 'ri-file-download-line',
        'PRINT' => 'ri-printer-line',
        'ASSIGN' => 'ri-user-star-line',
        'STATUS_CHANGE' => 'ri-exchange-line',
        'OTHER' => 'ri-information-line'
    ];
    return $icons[$action_type] ?? 'ri-file-list-line';
}

// Function to get color for action type
function getActionColor($action_type) {
    $colors = [
        'LOGIN' => 'success',
        'LOGOUT' => 'secondary',
        'CREATE' => 'primary',
        'UPDATE' => 'warning',
        'DELETE' => 'danger',
        'VIEW' => 'info',
        'EXPORT' => 'dark',
        'PRINT' => 'dark',
        'ASSIGN' => 'purple',
        'STATUS_CHANGE' => 'orange',
        'OTHER' => 'secondary'
    ];
    return $colors[$action_type] ?? 'secondary';
}
?>

<?php include './partials/layouts/layoutTop.php' ?>

<style>
.activity-filters {
    background-color: #f8f9fa;
    border-radius: 8px;
    padding: 16px;
    margin-bottom: 20px;
}

.activity-table {
    font-size: 0.9rem;
}

.activity-badge {
    font-size: 0.7rem;
    padding: 4px 10px;
    border-radius: 20px;
    font-weight: 500;
    display: inline-block;
}

.badge-success {
    background-color: rgba(16, 185, 129, 0.1);
    color: #10b981;
}

.badge-primary {
    background-color: rgba(59, 130, 246, 0.1);
    color: #3b82f6;
}

.badge-warning {
    background-color: rgba(245, 158, 11, 0.1);
    color: #f59e0b;
}

.badge-danger {
    background-color: rgba(239, 68, 68, 0.1);
    color: #ef4444;
}

.badge-info {
    background-color: rgba(59, 130, 246, 0.1);
    color: #3b82f6;
}

.badge-secondary {
    background-color: rgba(100, 116, 139, 0.1);
    color: #64748b;
}

.badge-purple {
    background-color: rgba(147, 51, 234, 0.1);
    color: #9333ea;
}

.badge-orange {
    background-color: rgba(249, 115, 22, 0.1);
    color: #f97316;
}

.user-info {
    display: flex;
    align-items: center;
    gap: 8px;
}

.user-avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background-color: #e9ecef;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1rem;
    color: #6c757d;
}

.json-data {
    max-width: 200px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    cursor: pointer;
    color: #3b82f6;
    text-decoration: underline dotted;
}

.json-data:hover {
    color: #2563eb;
}

/* Modal styles */
.json-modal-body {
    max-height: 400px;
    overflow-y: auto;
    background-color: #f8f9fa;
    border-radius: 8px;
    padding: 16px;
}

.json-modal-body pre {
    margin: 0;
    white-space: pre-wrap;
    word-wrap: break-word;
    font-size: 0.85rem;
}
</style>

<div class="dashboard-main-body">
    <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-24">
        <h6 class="fw-semibold mb-0">Activity Log</h6>
        <div>
            <a href="dashboard.php" class="btn btn-outline-light btn-sm">
                <i class="ri-arrow-left-line"></i> Back to Dashboard
            </a>
        </div>
    </div>

    <!-- Filters -->
    <div class="card activity-filters">
        <div class="card-body">
            <form method="GET" class="row g-3">
                <div class="col-md-3">
                    <label class="form-label">Action Type</label>
                    <select name="action_type" class="form-select form-select-sm">
                        <option value="">All Actions</option>
                        <option value="LOGIN" <?php echo $action_filter == 'LOGIN' ? 'selected' : ''; ?>>Login</option>
                        <option value="LOGOUT" <?php echo $action_filter == 'LOGOUT' ? 'selected' : ''; ?>>Logout</option>
                        <option value="CREATE" <?php echo $action_filter == 'CREATE' ? 'selected' : ''; ?>>Create</option>
                        <option value="UPDATE" <?php echo $action_filter == 'UPDATE' ? 'selected' : ''; ?>>Update</option>
                        <option value="DELETE" <?php echo $action_filter == 'DELETE' ? 'selected' : ''; ?>>Delete</option>
                        <option value="VIEW" <?php echo $action_filter == 'VIEW' ? 'selected' : ''; ?>>View</option>
                        <option value="PRINT" <?php echo $action_filter == 'PRINT' ? 'selected' : ''; ?>>Print</option>
                        <option value="EXPORT" <?php echo $action_filter == 'EXPORT' ? 'selected' : ''; ?>>Export</option>
                        <option value="ASSIGN" <?php echo $action_filter == 'ASSIGN' ? 'selected' : ''; ?>>Assign</option>
                        <option value="STATUS_CHANGE" <?php echo $action_filter == 'STATUS_CHANGE' ? 'selected' : ''; ?>>Status Change</option>
                    </select>
                </div>
                <div class="col-md-3">
                    <label class="form-label">User</label>
                    <select name="user_id" class="form-select form-select-sm">
                        <option value="">All Users</option>
                        <?php foreach ($users as $user): ?>
                            <option value="<?php echo $user['user_id']; ?>" <?php echo $user_filter == $user['user_id'] ? 'selected' : ''; ?>>
                                <?php echo htmlspecialchars($user['full_name'] ?: $user['username']); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label">From Date</label>
                    <input type="date" name="date_from" class="form-control form-control-sm" value="<?php echo $date_from; ?>">
                </div>
                <div class="col-md-2">
                    <label class="form-label">To Date</label>
                    <input type="date" name="date_to" class="form-control form-control-sm" value="<?php echo $date_to; ?>">
                </div>
                <div class="col-md-2 d-flex align-items-end">
                    <button type="submit" class="btn btn-primary btn-sm me-2">
                        <i class="ri-filter-2-line"></i> Apply
                    </button>
                    <a href="activity_log.php" class="btn btn-outline-secondary btn-sm">
                        <i class="ri-refresh-line"></i> Reset
                    </a>
                </div>
            </form>
        </div>
    </div>

    <!-- Activity Log Table -->
    <div class="card">
        <div class="card-body p-24">
            <div class="table-responsive">
                <table class="table bordered-table mb-0 activity-table">
                    <thead>
                        <tr>
                            <th scope="col" width="50">#</th>
                            <th scope="col">User</th>
                            <th scope="col">Action</th>
                            <th scope="col">Description</th>
                            <th scope="col">Table</th>
                            <th scope="col">Record ID</th>
                            <th scope="col">Old/New Data</th>
                            <th scope="col">IP Address</th>
                            <th scope="col">Date & Time</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (count($activities) > 0): ?>
                            <?php foreach ($activities as $index => $activity): ?>
                                <tr>
                                    <td><?php echo $offset + $index + 1; ?></td>
                                    <td>
                                        <div class="user-info">
                                            <div class="user-avatar">
                                                <i class="ri-user-line"></i>
                                            </div>
                                            <div>
                                                <div class="fw-600"><?php echo htmlspecialchars($activity['full_name'] ?: $activity['username'] ?: 'System'); ?></div>
                                                <?php if (!empty($activity['role'])): ?>
                                                    <small class="text-secondary-light"><?php echo ucfirst($activity['role']); ?></small>
                                                <?php endif; ?>
                                            </div>
                                        </div>
                                    </td>
                                    <td>
                                        <span class="activity-badge badge-<?php echo getActionColor($activity['action_type']); ?>">
                                            <i class="<?php echo getActionIcon($activity['action_type']); ?> me-1"></i>
                                            <?php echo $activity['action_type']; ?>
                                        </span>
                                    </td>
                                    <td>
                                        <div title="<?php echo htmlspecialchars($activity['description']); ?>">
                                            <?php echo htmlspecialchars(substr($activity['description'], 0, 50)) . (strlen($activity['description']) > 50 ? '...' : ''); ?>
                                        </div>
                                    </td>
                                    <td><?php echo htmlspecialchars($activity['table_name'] ?: '-'); ?></td>
                                    <td><?php echo $activity['record_id'] ?: '-'; ?></td>
                                    <td>
                                        <?php if (!empty($activity['old_data']) || !empty($activity['new_data'])): ?>
                                            <span class="json-data" onclick="showJsonData(<?php echo htmlspecialchars(json_encode([
                                                'old' => json_decode($activity['old_data'], true),
                                                'new' => json_decode($activity['new_data'], true)
                                            ])); ?>)">
                                                <i class="ri-file-copy-line"></i> View Changes
                                            </span>
                                        <?php else: ?>
                                            -
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <?php if (!empty($activity['ip_address'])): ?>
                                            <span title="<?php echo htmlspecialchars($activity['ip_address']); ?>">
                                                <?php echo substr($activity['ip_address'], 0, 15) . (strlen($activity['ip_address']) > 15 ? '...' : ''); ?>
                                            </span>
                                        <?php else: ?>
                                            -
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <?php echo date('d M Y', strtotime($activity['created_at'])); ?>
                                        <br>
                                        <small class="text-secondary-light"><?php echo date('h:i A', strtotime($activity['created_at'])); ?></small>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        <?php else: ?>
                            <tr>
                                <td colspan="9" class="text-center py-40">
                                    <img src="assets/images/empty-activity.png" alt="No activities" class="mb-16" style="max-width: 120px;">
                                    <h6 class="text-md mb-8">No Activities Found</h6>
                                    <p class="text-sm text-secondary-light">No activity logs match your filters</p>
                                </td>
                            </tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>

            <!-- Pagination -->
            <?php if ($total_pages > 1): ?>
                <div class="d-flex justify-content-between align-items-center mt-24">
                    <div class="text-secondary-light">
                        Showing <?php echo $offset + 1; ?> to <?php echo min($offset + $limit, $total_records); ?> of <?php echo $total_records; ?> entries
                    </div>
                    <nav aria-label="Page navigation">
                        <ul class="pagination mb-0">
                            <li class="page-item <?php echo $page <= 1 ? 'disabled' : ''; ?>">
                                <a class="page-link" href="?page=<?php echo $page - 1; ?>&action_type=<?php echo urlencode($action_filter); ?>&user_id=<?php echo urlencode($user_filter); ?>&date_from=<?php echo urlencode($date_from); ?>&date_to=<?php echo urlencode($date_to); ?>" tabindex="-1">
                                    <i class="ri-arrow-left-line"></i>
                                </a>
                            </li>
                            
                            <?php for ($i = 1; $i <= $total_pages; $i++): ?>
                                <?php if ($i >= $page - 2 && $i <= $page + 2): ?>
                                    <li class="page-item <?php echo $i == $page ? 'active' : ''; ?>">
                                        <a class="page-link" href="?page=<?php echo $i; ?>&action_type=<?php echo urlencode($action_filter); ?>&user_id=<?php echo urlencode($user_filter); ?>&date_from=<?php echo urlencode($date_from); ?>&date_to=<?php echo urlencode($date_to); ?>">
                                            <?php echo $i; ?>
                                        </a>
                                    </li>
                                <?php endif; ?>
                            <?php endfor; ?>
                            
                            <li class="page-item <?php echo $page >= $total_pages ? 'disabled' : ''; ?>">
                                <a class="page-link" href="?page=<?php echo $page + 1; ?>&action_type=<?php echo urlencode($action_filter); ?>&user_id=<?php echo urlencode($user_filter); ?>&date_from=<?php echo urlencode($date_from); ?>&date_to=<?php echo urlencode($date_to); ?>">
                                    <i class="ri-arrow-right-line"></i>
                                </a>
                            </li>
                        </ul>
                    </nav>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<!-- JSON Data Modal -->
<div class="modal fade" id="jsonModal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Data Changes</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <div class="json-modal-body" id="jsonContent">
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

<?php include './partials/layouts/layoutBottom.php' ?>

<script>
function showJsonData(data) {
    const modal = new bootstrap.Modal(document.getElementById('jsonModal'));
    const content = document.getElementById('jsonContent');
    
    let html = '<div class="row">';
    
    if (data.old) {
        html += '<div class="col-md-6">';
        html += '<h6 class="text-danger mb-3">Old Data:</h6>';
        html += '<pre>' + JSON.stringify(data.old, null, 2) + '</pre>';
        html += '</div>';
    }
    
    if (data.new) {
        html += '<div class="col-md-6">';
        html += '<h6 class="text-success mb-3">New Data:</h6>';
        html += '<pre>' + JSON.stringify(data.new, null, 2) + '</pre>';
        html += '</div>';
    }
    
    if (!data.old && !data.new) {
        html += '<div class="col-12 text-center text-muted">No data available</div>';
    }
    
    html += '</div>';
    
    content.innerHTML = html;
    modal.show();
}
</script>