Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/conference/admin/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/conference/admin/advanced-reports.php

<?php
require_once '../includes/functions.php';

// Check if user is logged in and has admin privileges
if (!isLoggedIn()) {
    header('Location: ' . BASE_URL . 'login.php');
    exit();
}

$user = getCurrentUser();
if (!in_array($user['role'], ['superuser', 'area_admin', 'district_admin', 'assembly_admin'])) {
    header('Location: ' . BASE_URL . 'dashboard.php');
    exit();
}

$db = new CopMadinaDB();
$conn = $db->getConnection();

// Get filter parameters
$filter_type = $_GET['filter_type'] ?? 'events';
$date_from = $_GET['date_from'] ?? date('Y-m-01');
$date_to = $_GET['date_to'] ?? date('Y-m-t');
$area_id = $_GET['area_id'] ?? '';
$district_id = $_GET['district_id'] ?? '';
$assembly_id = $_GET['assembly_id'] ?? '';
$status = $_GET['status'] ?? '';
$member_type = $_GET['member_type'] ?? '';

// Build where clause based on user role
$role_where = "";
$role_params = [];

if ($user['role'] === 'area_admin') {
    $role_where = " AND e.area_id = ?";
    $role_params[] = $user['area_id'];
} elseif ($user['role'] === 'district_admin') {
    $role_where = " AND e.district_id = ?";
    $role_params[] = $user['district_id'];
} elseif ($user['role'] === 'assembly_admin') {
    $role_where = " AND e.assembly_id = ?";
    $role_params[] = $user['assembly_id'];
}

// Get dropdown data
$stmt = executeQuery("SELECT id, name FROM areas WHERE status = 'active' ORDER BY name");
$areas = $stmt ? $stmt->fetchAll() : [];

$stmt = executeQuery("SELECT id, name, area_id FROM districts WHERE status = 'active' ORDER BY name");
$districts = $stmt ? $stmt->fetchAll() : [];

$stmt = executeQuery("SELECT id, name, district_id FROM assemblies WHERE status = 'active' ORDER BY name");
$assemblies = $stmt ? $stmt->fetchAll() : [];

// Initialize data arrays
$chart_data = [];
$table_data = [];
$summary_stats = [];


// Process data based on filter type
switch ($filter_type) {
    case 'events':
        // Events analytics
        $where_conditions = ["1=1"];
        $params = [];
        
        if ($date_from) {
            $where_conditions[] = "e.start_date >= ?";
            $params[] = $date_from;
        }
        if ($date_to) {
            $where_conditions[] = "e.end_date <= ?";
            $params[] = $date_to;
        }
        if ($area_id) {
            $where_conditions[] = "e.area_id = ?";
            $params[] = $area_id;
        }
        if ($district_id) {
            $where_conditions[] = "e.district_id = ?";
            $params[] = $district_id;
        }
        if ($assembly_id) {
            $where_conditions[] = "e.assembly_id = ?";
            $params[] = $assembly_id;
        }
        if ($status) {
            $where_conditions[] = "e.status = ?";
            $params[] = $status;
        }
        
        $where_clause = implode(' AND ', $where_conditions) . $role_where;
        $all_params = array_merge($params, $role_params);
        
        try {
            $query = "SELECT 
                        COALESCE(d.name, 'Area Level') as district_name,
                        COUNT(e.id) as count,
                        COALESCE(d.id, 0) as district_id
                      FROM events e 
                      LEFT JOIN districts d ON e.district_id = d.id 
                      WHERE " . implode(' AND ', $where_conditions) . "
                      GROUP BY COALESCE(d.id, 0), COALESCE(d.name, 'Area Level')
                      ORDER BY count DESC";
            
            $stmt = executeQuery($query, $params);
            $results = $stmt ? $stmt->fetchAll() : [];
            
            foreach ($results as $row) {
                $chart_data[] = [
                    'label' => $row['district_name'],
                    'value' => (int)$row['count']
                ];
                $table_data[] = [
                    'District' => $row['district_name'],
                    'Events' => $row['count']
                ];
            }
            
            $summary_stats = [
                'total_events' => array_sum(array_column($chart_data, 'value')),
                'districts_with_events' => count($chart_data)
            ];
            
        } catch (Exception $e) {
            error_log("Events query error: " . $e->getMessage());
        }
        
        
        // Detailed events table
        $events_detail_query = "
            SELECT 
                e.title,
                e.start_date,
                e.end_date,
                e.status,
                e.max_capacity,
                COALESCE(a.name, 'Unknown Area') as area_name,
                COALESCE(d.name, 'Unknown District') as district_name,
                COALESCE(ass.name, 'Unknown Assembly') as assembly_name,
                COALESCE((
                    SELECT COUNT(*) 
                    FROM event_registrations er 
                    WHERE er.event_id = e.id
                ), 0) + COALESCE((
                    SELECT COUNT(*) 
                    FROM nonmember_registrations nr 
                    WHERE nr.event_id = e.id
                ), 0) as registration_count,
                COALESCE((
                    SELECT SUM(CASE WHEN er.payment_status = 'paid' THEN er.amount_paid ELSE 0 END)
                    FROM event_registrations er 
                    WHERE er.event_id = e.id
                ), 0) + COALESCE((
                    SELECT SUM(CASE WHEN nr.payment_status = 'paid' THEN nr.amount_paid ELSE 0 END)
                    FROM nonmember_registrations nr 
                    WHERE nr.event_id = e.id
                ), 0) as revenue
            FROM events e
            LEFT JOIN areas a ON e.area_id = a.id
            LEFT JOIN districts d ON e.district_id = d.id
            LEFT JOIN assemblies ass ON e.assembly_id = ass.id
            WHERE $where_clause
            ORDER BY e.start_date DESC
            LIMIT 50
        ";
        
        $stmt = executeQuery($events_detail_query, $all_params);
        $table_data = $stmt ? $stmt->fetchAll() : [];
        break;
        
    case 'members':
        // Members analytics
        $where_conditions = ["u.role = 'member'"];
        $params = [];
        
        if ($date_from) {
            $where_conditions[] = "u.created_at >= ?";
            $params[] = $date_from;
        }
        if ($date_to) {
            $where_conditions[] = "u.created_at <= ?";
            $params[] = $date_to;
        }
        if ($area_id) {
            $where_conditions[] = "u.area_id = ?";
            $params[] = $area_id;
        }
        if ($district_id) {
            $where_conditions[] = "u.district_id = ?";
            $params[] = $district_id;
        }
        if ($assembly_id) {
            $where_conditions[] = "u.assembly_id = ?";
            $params[] = $assembly_id;
        }
        if ($status) {
            $where_conditions[] = "u.status = ?";
            $params[] = $status;
        }
        
        $where_clause = implode(' AND ', $where_conditions);
        
        // Members by district
        $members_query = "
            SELECT 
                d.name as district_name,
                COUNT(u.id) as member_count,
                COUNT(CASE WHEN u.status = 'active' THEN 1 END) as active_members
            FROM users u
            LEFT JOIN areas a ON u.area_id = a.id
            LEFT JOIN districts d ON u.district_id = d.id
            WHERE $where_clause
            GROUP BY u.district_id, d.name
            ORDER BY member_count DESC
        ";
        
        $stmt = executeQuery($members_query, $params);
        $chart_data = $stmt ? $stmt->fetchAll() : [];
        
        // Detailed members table
        $members_detail_query = "
            SELECT 
                u.first_name,
                u.last_name,
                u.email,
                u.phone,
                u.status,
                u.created_at,
                a.name as area_name,
                d.name as district_name,
                ass.name as assembly_name
            FROM users u
            LEFT JOIN areas a ON u.area_id = a.id
            LEFT JOIN districts d ON u.district_id = d.id
            LEFT JOIN assemblies ass ON u.assembly_id = ass.id
            WHERE $where_clause
            ORDER BY u.created_at DESC
            LIMIT 100
        ";
        
        $stmt = executeQuery($members_detail_query, $params);
        $table_data = $stmt ? $stmt->fetchAll() : [];
        break;
        
    case 'non_members':
        // Non-members analytics using nonmember_registrations table
        $where_conditions = ["1=1"];
        $params = [];
        
        if ($date_from) {
            $where_conditions[] = "nr.created_at >= ?";
            $params[] = $date_from;
        }
        if ($date_to) {
            $where_conditions[] = "nr.created_at <= ?";
            $params[] = $date_to;
        }
        if ($area_id) {
            $where_conditions[] = "e.area_id = ?";
            $params[] = $area_id;
        }
        if ($district_id) {
            $where_conditions[] = "e.district_id = ?";
            $params[] = $district_id;
        }
        if ($assembly_id) {
            $where_conditions[] = "e.assembly_id = ?";
            $params[] = $assembly_id;
        }
        if ($status) {
            $where_conditions[] = "nr.status = ?";
            $params[] = $status;
        }
        
        $where_clause = implode(' AND ', $where_conditions) . $role_where;
        $all_params = array_merge($params, $role_params);
        
        // Non-members by district
        $non_members_query = "
            SELECT 
                d.name as district_name,
                COUNT(nr.id) as non_member_count,
                SUM(nr.amount_paid) as total_revenue,
                AVG(nr.amount_paid) as avg_amount
            FROM nonmember_registrations nr
            LEFT JOIN events e ON nr.event_id = e.id
            LEFT JOIN areas a ON e.area_id = a.id
            LEFT JOIN districts d ON e.district_id = d.id
            WHERE $where_clause
            GROUP BY d.id, d.name
            ORDER BY non_member_count DESC
            LIMIT 20
        ";
        
        $stmt = executeQuery($non_members_query, $all_params);
        $chart_data = $stmt ? $stmt->fetchAll() : [];
        
        // Detailed non-members table
        $non_members_detail_query = "
            SELECT 
                nr.registration_code,
                nr.first_name,
                nr.last_name,
                nr.email,
                nr.phone,
                e.title as event_title,
                nr.status,
                nr.payment_status,
                nr.amount_paid,
                nr.created_at,
                a.name as area_name,
                d.name as district_name
            FROM nonmember_registrations nr
            LEFT JOIN events e ON nr.event_id = e.id
            LEFT JOIN areas a ON e.area_id = a.id
            LEFT JOIN districts d ON e.district_id = d.id
            WHERE $where_clause
            ORDER BY nr.created_at DESC
            LIMIT 100
        ";
        
        $stmt = executeQuery($non_members_detail_query, $all_params);
        $table_data = $stmt ? $stmt->fetchAll() : [];
        break;
        
    case 'registrations':
        
        // Simplified registrations analytics
        $where_conditions = ["1=1"];
        $params = [];
        
        if ($date_from) {
            $where_conditions[] = "r.registration_date >= ?";
            $params[] = $date_from;
        }
        if ($date_to) {
            $where_conditions[] = "r.registration_date <= ?";
            $params[] = $date_to;
        }
        if ($district_id) {
            $where_conditions[] = "e.district_id = ?";
            $params[] = $district_id;
        }
        if ($assembly_id) {
            $where_conditions[] = "e.assembly_id = ?";
            $params[] = $assembly_id;
        }
        if ($status) {
            $where_conditions[] = "r.status = ?";
            $params[] = $status;
        }
        
        try {
            // Get member registrations
            $member_query = "SELECT 
                        COALESCE(d.name, 'Area Level') as district_name,
                        COUNT(r.id) as count
                      FROM event_registrations r
                      JOIN events e ON r.event_id = e.id
                      LEFT JOIN districts d ON e.district_id = d.id
                      WHERE " . implode(' AND ', $where_conditions) . "
                      GROUP BY COALESCE(d.id, 0), COALESCE(d.name, 'Area Level')";
            
            $stmt = executeQuery($member_query, $params);
            $member_results = $stmt ? $stmt->fetchAll() : [];
            
            // Get non-member registrations  
            $nonmember_query = "SELECT 
                        COALESCE(d.name, 'Area Level') as district_name,
                        COUNT(nr.id) as count
                      FROM nonmember_registrations nr
                      JOIN events e ON nr.event_id = e.id
                      LEFT JOIN districts d ON e.district_id = d.id
                      WHERE " . implode(' AND ', $where_conditions) . "
                      GROUP BY COALESCE(d.id, 0), COALESCE(d.name, 'Area Level')";
            
            $stmt = executeQuery($nonmember_query, $params);
            $nonmember_results = $stmt ? $stmt->fetchAll() : [];
            
            // Combine results
            $combined_data = [];
            foreach ($member_results as $row) {
                $district = $row['district_name'];
                $combined_data[$district] = ($combined_data[$district] ?? 0) + $row['count'];
            }
            foreach ($nonmember_results as $row) {
                $district = $row['district_name'];
                $combined_data[$district] = ($combined_data[$district] ?? 0) + $row['count'];
            }
            
            foreach ($combined_data as $district => $count) {
                $chart_data[] = [
                    'label' => $district,
                    'value' => (int)$count
                ];
                $table_data[] = [
                    'District' => $district,
                    'Registrations' => $count
                ];
            }
            
            $summary_stats = [
                'total_registrations' => array_sum(array_column($chart_data, 'value')),
                'districts_with_registrations' => count($chart_data)
            ];
            
        } catch (Exception $e) {
            error_log("Registrations query error: " . $e->getMessage());
        }
        
        break;
}

// Calculate summary statistics
if ($filter_type === 'events') {
    $summary_stats = [
        'total_events' => array_sum(array_column($chart_data, 'count')),
        'avg_capacity' => round(array_sum(array_column($chart_data, 'avg_capacity')) / max(count($chart_data), 1), 2),
        'total_registrations' => array_sum(array_column($chart_data, 'total_registrations'))
    ];
} elseif ($filter_type === 'members') {
    $summary_stats = [
        'total_members' => array_sum(array_column($chart_data, 'member_count')),
        'active_members' => array_sum(array_column($chart_data, 'active_members')),
        'areas_covered' => count(array_unique(array_column($chart_data, 'area_name')))
    ];
} elseif ($filter_type === 'non_members') {
    $summary_stats = [
        'total_non_members' => array_sum(array_column($chart_data, 'non_member_count')),
        'total_revenue' => array_sum(array_column($chart_data, 'total_revenue')),
        'avg_amount' => round(array_sum(array_column($chart_data, 'avg_amount')) / max(count($chart_data), 1), 2)
    ];
} elseif ($filter_type === 'registrations') {
    $summary_stats = [
        'total_registrations' => array_sum(array_column($chart_data, 'count')),
        'total_revenue' => array_sum(array_column($chart_data, 'total_amount')),
        'avg_amount' => round(array_sum(array_column($chart_data, 'avg_amount')) / max(count($chart_data), 1), 2)
    ];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Advanced Reports - COP Madina Conference</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.31/jspdf.plugin.autotable.min.js"></script>
</head>
<body class="bg-gradient-to-br from-slate-50 to-blue-50 min-h-screen">
    <div class="flex h-screen">
        <!-- Sidebar -->
        <?php include 'includes/admin_sidebar.php'; ?>
        
        <!-- Main Content -->
        <div class="flex-1 flex flex-col overflow-hidden ml-72">
            <!-- Header -->
            <?php include 'includes/admin_header.php'; ?>

            <!-- Content -->
            <main class="flex-1 overflow-y-auto p-8">
                <!-- Filters Section -->
                <div class="bg-white/80 backdrop-blur-sm rounded-2xl shadow-xl border border-slate-200/50 p-6 mb-8">
                    <h2 class="text-xl font-bold text-slate-800 mb-4 flex items-center">
                        <i class="fas fa-filter text-blue-600 mr-2"></i>
                        Advanced Filters
                    </h2>
                    
                    <form method="GET" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
                        <!-- Filter Type -->
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Report Type</label>
                            <select name="filter_type" class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                                <option value="events" <?php echo $filter_type === 'events' ? 'selected' : ''; ?>>Events</option>
                                <option value="members" <?php echo $filter_type === 'members' ? 'selected' : ''; ?>>Members</option>
                                <option value="non_members" <?php echo $filter_type === 'non_members' ? 'selected' : ''; ?>>Non-Members</option>
                                <option value="registrations" <?php echo $filter_type === 'registrations' ? 'selected' : ''; ?>>Registrations</option>
                            </select>
                        </div>
                        
                        <!-- Date From -->
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Date From</label>
                            <input type="date" name="date_from" value="<?php echo htmlspecialchars($date_from); ?>" 
                                   class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                        </div>
                        
                        <!-- Date To -->
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Date To</label>
                            <input type="date" name="date_to" value="<?php echo htmlspecialchars($date_to); ?>" 
                                   class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                        </div>
                        
                        <!-- Area -->
                        <?php if ($user['role'] === 'superuser'): ?>
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Area</label>
                            <select name="area_id" class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                                <option value="">All Areas</option>
                                <?php foreach ($areas as $area): ?>
                                <option value="<?php echo $area['id']; ?>" <?php echo $area_id == $area['id'] ? 'selected' : ''; ?>>
                                    <?php echo htmlspecialchars($area['name']); ?>
                                </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <?php endif; ?>
                        
                        <!-- District -->
                        <?php if (in_array($user['role'], ['superuser', 'area_admin'])): ?>
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">District</label>
                            <select name="district_id" class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                                <option value="">All Districts</option>
                                <?php foreach ($districts as $district): ?>
                                <option value="<?php echo $district['id']; ?>" <?php echo $district_id == $district['id'] ? 'selected' : ''; ?>>
                                    <?php echo htmlspecialchars($district['name']); ?>
                                </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <?php endif; ?>
                        
                        <!-- Assembly -->
                        <?php if (in_array($user['role'], ['superuser', 'area_admin', 'district_admin'])): ?>
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Assembly</label>
                            <select name="assembly_id" class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                                <option value="">All Assemblies</option>
                                <?php foreach ($assemblies as $assembly): ?>
                                <option value="<?php echo $assembly['id']; ?>" <?php echo $assembly_id == $assembly['id'] ? 'selected' : ''; ?>>
                                    <?php echo htmlspecialchars($assembly['name']); ?>
                                </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <?php endif; ?>
                        
                        <!-- Status -->
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Status</label>
                            <select name="status" class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                                <option value="">All Status</option>
                                <?php if ($filter_type === 'events'): ?>
                                <option value="draft" <?php echo $status === 'draft' ? 'selected' : ''; ?>>Draft</option>
                                <option value="published" <?php echo $status === 'published' ? 'selected' : ''; ?>>Published</option>
                                <option value="active" <?php echo $status === 'active' ? 'selected' : ''; ?>>Active</option>
                                <option value="completed" <?php echo $status === 'completed' ? 'selected' : ''; ?>>Completed</option>
                                <option value="cancelled" <?php echo $status === 'cancelled' ? 'selected' : ''; ?>>Cancelled</option>
                                <?php else: ?>
                                <option value="active" <?php echo $status === 'active' ? 'selected' : ''; ?>>Active</option>
                                <option value="inactive" <?php echo $status === 'inactive' ? 'selected' : ''; ?>>Inactive</option>
                                <?php endif; ?>
                            </select>
                        </div>
                        
                        <!-- Member Type (for registrations) -->
                        <?php if ($filter_type === 'registrations'): ?>
                        <div>
                            <label class="block text-sm font-medium text-slate-700 mb-2">Member Type</label>
                            <select name="member_type" class="w-full px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
                                <option value="">All Types</option>
                                <option value="member" <?php echo $member_type === 'member' ? 'selected' : ''; ?>>Members</option>
                                <option value="non_member" <?php echo $member_type === 'non_member' ? 'selected' : ''; ?>>Non-Members</option>
                            </select>
                        </div>
                        <?php endif; ?>
                        
                        <!-- Submit Button -->
                        <div class="flex items-end">
                            <button type="submit" class="w-full px-4 py-2 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white font-medium rounded-lg transition-all duration-200 flex items-center justify-center space-x-2">
                                <i class="fas fa-search"></i>
                                <span>Apply Filters</span>
                            </button>
                        </div>
                    </form>
                </div>

                <!-- Summary Statistics -->
                <?php if (!empty($summary_stats)): ?>
                <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
                    <?php foreach ($summary_stats as $key => $value): ?>
                    <div class="bg-white/80 backdrop-blur-sm rounded-2xl shadow-xl border border-slate-200/50 p-6">
                        <div class="flex items-center justify-between">
                            <div>
                                <p class="text-sm font-medium text-slate-600"><?php echo ucwords(str_replace('_', ' ', $key)); ?></p>
                                <p class="text-2xl font-bold text-slate-800">
                                    <?php echo is_numeric($value) ? number_format($value, 2) : $value; ?>
                                </p>
                            </div>
                            <div class="p-3 rounded-full bg-gradient-to-br from-blue-500 to-purple-600">
                                <i class="fas fa-chart-bar text-white"></i>
                            </div>
                        </div>
                    </div>
                    <?php endforeach; ?>
                </div>
                <?php endif; ?>

                <!-- Charts Section -->
                <?php if (!empty($chart_data)): ?>
                <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
                    <!-- Pie Chart -->
                    <div class="bg-white/80 backdrop-blur-sm rounded-2xl shadow-xl border border-slate-200/50 p-6">
                        <h3 class="text-lg font-bold text-slate-800 mb-4">Distribution Chart</h3>
                        <canvas id="pieChart" width="400" height="300"></canvas>
                    </div>
                    
                    <!-- Bar Chart -->
                    <div class="bg-white/80 backdrop-blur-sm rounded-2xl shadow-xl border border-slate-200/50 p-6">
                        <h3 class="text-lg font-bold text-slate-800 mb-4">Comparison Chart</h3>
                        <canvas id="barChart" width="400" height="300"></canvas>
                    </div>
                </div>
                <?php endif; ?>

                <!-- Data Table -->
                <?php if (!empty($table_data)): ?>
                <div class="bg-white/80 backdrop-blur-sm rounded-2xl shadow-xl border border-slate-200/50 p-6">
                    <div class="flex items-center justify-between mb-4">
                        <h3 class="text-lg font-bold text-slate-800">Detailed Data</h3>
                        <div class="flex space-x-2">
                            <button onclick="exportToCSV()" class="px-4 py-2 bg-green-600 hover:bg-green-700 text-white font-medium rounded-lg transition-colors flex items-center space-x-2">
                                <i class="fas fa-file-csv"></i>
                                <span>Export CSV</span>
                            </button>
                            <button onclick="exportToPDF()" class="px-4 py-2 bg-red-600 hover:bg-red-700 text-white font-medium rounded-lg transition-colors flex items-center space-x-2">
                                <i class="fas fa-file-pdf"></i>
                                <span>Export PDF</span>
                            </button>
                        </div>
                    </div>
                    
                    <div class="overflow-x-auto">
                        <table class="w-full table-auto" id="dataTable">
                            <thead>
                                <tr class="border-b border-slate-200">
                                    <?php if (!empty($table_data)): ?>
                                        <?php foreach (array_keys($table_data[0]) as $header): ?>
                                        <th class="text-left py-3 px-4 font-medium text-slate-700">
                                            <?php echo ucwords(str_replace('_', ' ', $header)); ?>
                                        </th>
                                        <?php endforeach; ?>
                                    <?php endif; ?>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach ($table_data as $row): ?>
                                <tr class="border-b border-slate-100 hover:bg-slate-50">
                                    <?php foreach ($row as $cell): ?>
                                    <td class="py-3 px-4 text-slate-600">
                                        <?php echo htmlspecialchars($cell ?? ''); ?>
                                    </td>
                                    <?php endforeach; ?>
                                </tr>
                                <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
                <?php endif; ?>
            </main>
        </div>
    </div>

    <script>
        // Chart data from PHP
        const chartData = <?php echo json_encode($chart_data); ?>;
        const filterType = '<?php echo $filter_type; ?>';
        
        // Initialize charts if data exists
        if (chartData && chartData.length > 0) {
            // Pie Chart
            const pieCtx = document.getElementById('pieChart');
            if (pieCtx) {
                let pieLabels, pieData;
                
                
                if (filterType === 'events') {
                    pieLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    pieData = chartData.map(item => item.value || item.count || 0);
                } else if (filterType === 'members') {
                    pieLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    pieData = chartData.map(item => item.value || item.member_count || 0);
                } else if (filterType === 'non_members') {
                    pieLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    pieData = chartData.map(item => item.value || item.non_member_count || 0);
                } else if (filterType === 'registrations') {
                    pieLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    pieData = chartData.map(item => item.value || item.count || 0);
                }
                
                
                new Chart(pieCtx, {
                    type: 'pie',
                    data: {
                        labels: pieLabels,
                        datasets: [{
                            data: pieData,
                            backgroundColor: [
                                '#3B82F6', '#8B5CF6', '#10B981', '#F59E0B', 
                                '#EF4444', '#6B7280', '#EC4899', '#14B8A6'
                            ]
                        }]
                    },
                    options: {
                        responsive: true,
                        maintainAspectRatio: false,
                        plugins: {
                            legend: {
                                position: 'bottom'
                            }
                        }
                    }
                });
            }
            
            // Bar Chart
            const barCtx = document.getElementById('barChart');
            if (barCtx) {
                let barLabels, barData;
                
                if (filterType === 'events') {
                    barLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    barData = chartData.map(item => item.value || item.count || item.total_registrations || 0);
                } else if (filterType === 'members') {
                    barLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    barData = chartData.map(item => item.value || item.active_members || 0);
                } else if (filterType === 'non_members') {
                    barLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    barData = chartData.map(item => item.value || item.total_revenue || 0);
                } else if (filterType === 'registrations') {
                    barLabels = chartData.map(item => item.label || item.district_name || 'Unknown');
                    barData = chartData.map(item => item.value || item.count || item.total_amount || 0);
                }
                
                
                new Chart(barCtx, {
                    type: 'bar',
                    data: {
                        labels: barLabels,
                        datasets: [{
                            label: filterType === 'registrations' ? 'Revenue' : 'Count',
                            data: barData,
                            backgroundColor: 'rgba(59, 130, 246, 0.8)',
                            borderColor: 'rgba(59, 130, 246, 1)',
                            borderWidth: 1
                        }]
                    },
                    options: {
                        responsive: true,
                        maintainAspectRatio: false,
                        scales: {
                            y: {
                                beginAtZero: true
                            }
                        }
                    }
                });
            }
        }
        
        // Export to CSV function
        function exportToCSV() {
            const table = document.getElementById('dataTable');
            if (!table) return;
            
            let csv = [];
            const rows = table.querySelectorAll('tr');
            
            for (let i = 0; i < rows.length; i++) {
                const row = [], cols = rows[i].querySelectorAll('td, th');
                
                for (let j = 0; j < cols.length; j++) {
                    row.push(cols[j].innerText);
                }
                
                csv.push(row.join(','));
            }
            
            const csvFile = new Blob([csv.join('\n')], { type: 'text/csv' });
            const downloadLink = document.createElement('a');
            
            downloadLink.download = `advanced_report_${filterType}_${new Date().toISOString().split('T')[0]}.csv`;
            downloadLink.href = window.URL.createObjectURL(csvFile);
            downloadLink.style.display = 'none';
            
            document.body.appendChild(downloadLink);
            downloadLink.click();
            document.body.removeChild(downloadLink);
        }
        
        // Export to PDF function
        function exportToPDF() {
            const { jsPDF } = window.jspdf;
            const doc = new jsPDF();
            
            // Add title
            doc.setFontSize(20);
            doc.text('Advanced Reports - COP Madina Conference', 20, 20);
            
            // Add report type and date
            doc.setFontSize(12);
            doc.text(`Report Type: ${filterType.charAt(0).toUpperCase() + filterType.slice(1)}`, 20, 35);
            doc.text(`Generated: ${new Date().toLocaleDateString()}`, 20, 45);
            
            // Add summary statistics if available
            const summaryStats = <?php echo json_encode($summary_stats ?? []); ?>;
            if (summaryStats && Object.keys(summaryStats).length > 0) {
                doc.setFontSize(14);
                doc.text('Summary Statistics:', 20, 65);
                
                let yPos = 75;
                Object.entries(summaryStats).forEach(([key, value]) => {
                    doc.setFontSize(10);
                    const label = key.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
                    const displayValue = typeof value === 'number' ? value.toLocaleString() : value;
                    doc.text(`${label}: ${displayValue}`, 20, yPos);
                    yPos += 10;
                });
                yPos += 10;
            } else {
                var yPos = 65;
            }
            
            // Add table data
            const table = document.getElementById('dataTable');
            if (table) {
                const headers = [];
                const data = [];
                
                // Get headers
                const headerCells = table.querySelectorAll('thead th');
                headerCells.forEach(cell => {
                    headers.push(cell.innerText);
                });
                
                // Get data rows
                const dataRows = table.querySelectorAll('tbody tr');
                dataRows.forEach(row => {
                    const rowData = [];
                    const cells = row.querySelectorAll('td');
                    cells.forEach(cell => {
                        rowData.push(cell.innerText);
                    });
                    data.push(rowData);
                });
                
                // Add table to PDF
                doc.autoTable({
                    head: [headers],
                    body: data,
                    startY: yPos,
                    styles: {
                        fontSize: 8,
                        cellPadding: 2
                    },
                    headStyles: {
                        fillColor: [59, 130, 246],
                        textColor: 255,
                        fontStyle: 'bold'
                    },
                    alternateRowStyles: {
                        fillColor: [248, 250, 252]
                    },
                    margin: { left: 20, right: 20 }
                });
            }
            
            // Add footer
            const pageCount = doc.internal.getNumberOfPages();
            for (let i = 1; i <= pageCount; i++) {
                doc.setPage(i);
                doc.setFontSize(8);
                doc.text(`Page ${i} of ${pageCount}`, doc.internal.pageSize.width - 40, doc.internal.pageSize.height - 10);
                doc.text('COP Madina Conference Management System', 20, doc.internal.pageSize.height - 10);
            }
            
            // Save the PDF
            doc.save(`advanced_report_${filterType}_${new Date().toISOString().split('T')[0]}.pdf`);
        }
    </script>
</body>
</html>

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists