<?php
session_start();
require_once '../includes/funciones_registro.php';
require_once '../includes/db.php';
require_once '../includes/config.php';

// Verificar que el usuario esté logueado
if (!isset($_SESSION['usuario_id'])) {
    error_log("Acceso denegado a exportar_actividades: usuario_id no está definido en la sesión");
    header('Location: ../login.php');
    exit();
}

// Verificar que sea un administrador
$esAdmin = false;
if (
    (isset($_SESSION['rol']) && $_SESSION['rol'] == 'admin') ||
    (isset($_SESSION['tipo_usuario']) && $_SESSION['tipo_usuario'] == 'admin')
) {
    $esAdmin = true;
}

if (!$esAdmin) {
    header('Location: ../index.php');
    exit();
}

// Inicializar la conexión
$db = new Database();
$pdo = $db->getPDO();

// Obtener configuración para el nombre del archivo
$nombre_empresa = 'Sistema';
try {
    $stmt = $pdo->prepare("SELECT nombre_comercio FROM configuracion WHERE id = 1");
    $stmt->execute();
    $config = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($config && isset($config['nombre_comercio'])) {
        $nombre_empresa = $config['nombre_comercio'];
    }
} catch (PDOException $e) {
    // Usar el valor predeterminado
}

// Filtros para la búsqueda (mismo código que en historial_actividades.php)
$id_usuario = isset($_GET['id_usuario']) ? intval($_GET['id_usuario']) : 0;
$tipo_accion = isset($_GET['tipo_accion']) ? $_GET['tipo_accion'] : '';
$limite = isset($_GET['limite']) ? intval($_GET['limite']) : 100;
$fecha_desde = isset($_GET['fecha_desde']) ? $_GET['fecha_desde'] : '';
$fecha_hasta = isset($_GET['fecha_hasta']) ? $_GET['fecha_hasta'] : '';
$hora_desde = isset($_GET['hora_desde']) ? $_GET['hora_desde'] : '';
$hora_hasta = isset($_GET['hora_hasta']) ? $_GET['hora_hasta'] : '';

// Construir la consulta usando PDO
$query = "SELECT ra.*, u.nombre as nombre_usuario 
          FROM registro_actividad_usuario ra 
          LEFT JOIN usuarios u ON ra.id_usuario = u.id 
          WHERE 1=1";
$params = [];

// Aplicar filtros a la consulta
if ($id_usuario > 0) {
    $query .= " AND ra.id_usuario = ?";
    $params[] = $id_usuario;
}

if (!empty($tipo_accion)) {
    $query .= " AND ra.tipo_accion = ?";
    $params[] = $tipo_accion;
}

// Aplicar filtro de fechas y horas
if (!empty($fecha_desde)) {
    if (!empty($hora_desde)) {
        $query .= " AND ra.fecha_creacion >= ?";
        $params[] = $fecha_desde . ' ' . $hora_desde . ':00';
    } else {
        $query .= " AND ra.fecha_creacion >= ?";
        $params[] = $fecha_desde . ' 00:00:00';
    }
}

if (!empty($fecha_hasta)) {
    if (!empty($hora_hasta)) {
        $query .= " AND ra.fecha_creacion <= ?";
        $params[] = $fecha_hasta . ' ' . $hora_hasta . ':59';
    } else {
        $query .= " AND ra.fecha_creacion <= ?";
        $params[] = $fecha_hasta . ' 23:59:59';
    }
}

// Ordenar por fecha de creación, del más reciente al más antiguo
$query .= " ORDER BY ra.fecha_creacion DESC";

// Aplicar límite
if ($limite > 0) {
    $query .= " LIMIT " . $limite;
}

// Ejecutar la consulta
$stmt = $pdo->prepare($query);
$stmt->execute($params);
$actividades = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Preparar la salida en formato Excel
$nombreArchivo = preg_replace('/[^a-zA-Z0-9]/', '_', $nombre_empresa) . '_Actividades_' . date('Ymd_His') . '.csv';

// Encabezados HTTP para la descarga
header('Content-Encoding: UTF-8');
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="' . $nombreArchivo . '"');
header('Cache-Control: max-age=0');

// Crear el archivo CSV
$output = fopen('php://output', 'w');

// BOM para Excel (para correcta interpretación de caracteres UTF-8)
fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

// Encabezados de columna
fputcsv($output, [
    'ID', 
    'Usuario', 
    'ID Usuario', 
    'Acción',
    'Detalles',
    'Dirección IP',
    'Fecha y Hora'
]);

// Datos
foreach ($actividades as $actividad) {
    fputcsv($output, [
        $actividad['id'],
        isset($actividad['nombre_usuario']) ? $actividad['nombre_usuario'] : 'No disponible',
        $actividad['id_usuario'],
        str_replace('_', ' ', ucfirst($actividad['tipo_accion'])),
        $actividad['detalles_accion'],
        $actividad['direccion_ip'],
        $actividad['fecha_creacion']
    ]);
}

// Cerrar el archivo
fclose($output);
exit;
?>
