<?php
// config.php को शामिल करें, जो सेशन और डेटाबेस कनेक्शन को संभालेगा।
require_once 'config.php';

// यह फंक्शन जांच करेगा कि मौजूदा यूजर एडमिन या मैनेजर है या नहीं।
function userHasRole($required_roles) {
    if (!isset($_SESSION['user_roles'])) return false;
    return count(array_intersect($required_roles, $_SESSION['user_roles'])) > 0;
}

// सुरक्षा जांच
if (!isset($_SESSION['user_id']) || !userHasRole(['Admin', 'Manager'])) {
    die("Access Denied."); // अगर यूजर के पास अधिकार नहीं है तो रोक दें।
}

// --- FILTER LOGIC (from GET parameters) ---
$start_date_str = $_GET['start_date'] ?? date('Y-m-01');
$end_date_str = $_GET['end_date'] ?? date('Y-m-t');
$selected_employee_id = $_GET['employee_id'] ?? 'all';

// --- DATA FETCHING & UNIFIED CALCULATION ---
// क्वेरी को मल्टी-रोल के लिए अपडेट किया गया है
$sql = "SELECT 
            u.name, 
            GROUP_CONCAT(r.name SEPARATOR ', ') as roles, 
            dr.* FROM daily_reports dr 
        JOIN users u ON dr.user_id = u.id 
        LEFT JOIN user_roles ur ON u.id = ur.user_id
        LEFT JOIN roles r ON ur.role_id = r.id
        WHERE dr.report_date BETWEEN ? AND ?";

if ($selected_employee_id !== 'all') {
    $sql .= " AND u.id = ?";
}
$sql .= " GROUP BY dr.id ORDER BY dr.report_date DESC, u.name ASC";

$stmt = $conn->prepare($sql);
if ($selected_employee_id !== 'all') {
    $stmt->bind_param("ssi", $start_date_str, $end_date_str, $selected_employee_id);
} else {
    $stmt->bind_param("ss", $start_date_str, $end_date_str);
}

$stmt->execute();
$result = $stmt->get_result();

// --- SET HEADERS FOR CSV DOWNLOAD ---
$filename = "employee_performance_report_" . date('Y-m-d') . ".csv";
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');

// आउटपुट स्ट्रीम से जुड़ा एक फाइल पॉइंटर बनाएं
$output = fopen('php://output', 'w');

// --- CSV हैडर लिखें ---
fputcsv($output, [
    'Date', 
    'Employee Name', 
    'Roles', 
    'Attendance',
    'Assigned Tasks', 
    'Completed Tasks', 
    'Production (%)', 
    'Quality Score (%)', 
    'Rating (/5)'
]);

// --- डेटा के माध्यम से लूप करें और CSV में लिखें ---
while ($row = $result->fetch_assoc()) {
    // हर पंक्ति के लिए मेट्रिक्स की गणना करें
    $rating = 0;
    $production = 0;
    $quality = 'N/A';
    $assigned = 0;
    $done = 0;

    if ($row['attendance'] == 'Present') {
        $assigned = $row['total_assigned_tasks'] + $row['additional_assigned_tasks'];
        $done = $row['total_done_tasks'] + $row['additional_done_tasks'];
        $rating = ($assigned > 0) ? ($done / $assigned) * 5 : 5;
        $production = ($assigned > 0) ? ($done / $assigned) * 100 : 0;
        $pending_yesterday = $row['pending_tasks_yesterday'] ?? 0;
        $quality = max(0, 100 - $pending_yesterday);
    } elseif ($row['attendance'] == 'CL') {
        $rating = 4.5;
    }

    // CSV पंक्ति के लिए डेटा प्रारूपित करें
    $csv_row = [
        date("Y-m-d", strtotime($row['report_date'])),
        $row['name'],
        $row['roles'], // अपडेट किया गया ताकि सभी रोल्स दिखें
        $row['attendance'],
        $assigned,
        $done,
        round($production, 1),
        $quality,
        round($rating, 2)
    ];
    
    fputcsv($output, $csv_row);
}

$stmt->close();
$conn->close();
fclose($output);
exit();
?>