<?php
/**
 * TechShop Perú - Exportación de Reportes CSV (Mejora 12)
 * 
 * GET params:
 *   tipo: pedidos | clientes | stock_bajo | ventas_mes
 */
define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

if (!is_admin()) {
    http_response_code(403);
    die('Acceso denegado');
}

$tipo = $_GET['tipo'] ?? 'pedidos';
$db = db();
$rows = [];
$filename = 'reporte.csv';
$headers = [];

try {
    switch ($tipo) {
        case 'pedidos':
            $filename = 'pedidos_' . date('Ymd') . '.csv';
            $headers = ['ID', 'Cliente', 'Email', 'Total (S/)', 'Estado', 'Fecha'];
            $stmt = $db->query("
                SELECT p.id,
                       CONCAT(u.nombres, COALESCE(CONCAT(' ', u.apellidos), '')) AS cliente,
                       u.email,
                       p.total,
                       p.estado,
                       p.fecha_pedido
                FROM pedidos p
                JOIN usuarios u ON p.usuario_id = u.id
                ORDER BY p.id DESC LIMIT 5000
            ");
            $rows = $stmt->fetchAll(PDO::FETCH_NUM);
            break;

        case 'clientes':
            $filename = 'clientes_' . date('Ymd') . '.csv';
            $headers = ['ID', 'Nombre', 'Apellido', 'Email', 'Teléfono', 'Pedidos', 'Registrado'];
            $stmt = $db->query("
                SELECT u.id,
                       u.nombres,
                       COALESCE(u.apellidos, ''),
                       u.email,
                       COALESCE(u.telefono, ''),
                       COUNT(p.id) AS num_pedidos,
                       u.fecha_registro
                FROM usuarios u
                LEFT JOIN pedidos p ON p.usuario_id = u.id
                WHERE u.rol = 'cliente'
                GROUP BY u.id
                ORDER BY u.id DESC LIMIT 5000
            ");
            $rows = $stmt->fetchAll(PDO::FETCH_NUM);
            break;

        case 'stock_bajo':
            $filename = 'stock_bajo_' . date('Ymd') . '.csv';
            $headers = ['ID', 'SKU', 'Producto', 'Categoría', 'Marca', 'Stock', 'Precio (S/)'];
            $stmt = $db->query("
                SELECT p.id, COALESCE(p.sku,''), p.nombre, c.nombre, m.nombre, p.stock, p.precio
                FROM productos p
                JOIN categorias c ON p.categoria_id = c.id
                JOIN marcas m ON p.marca_id = m.id
                WHERE p.stock <= 5 AND p.activo = 1
                ORDER BY p.stock ASC
            ");
            $rows = $stmt->fetchAll(PDO::FETCH_NUM);
            break;

        case 'ventas_mes':
            $filename = 'ventas_por_mes_' . date('Ymd') . '.csv';
            $headers = ['Año', 'Mes', 'Pedidos', 'Total Ventas (S/)'];
            $stmt = $db->query("
                SELECT YEAR(fecha_pedido), MONTH(fecha_pedido), COUNT(*), SUM(total)
                FROM pedidos
                WHERE estado NOT IN ('cancelado')
                GROUP BY YEAR(fecha_pedido), MONTH(fecha_pedido)
                ORDER BY YEAR(fecha_pedido) DESC, MONTH(fecha_pedido) DESC
            ");
            $rows = $stmt->fetchAll(PDO::FETCH_NUM);
            break;

        default:
            die('Tipo de reporte no válido');
    }
} catch (Exception $e) {
    die('Error al generar el reporte: ' . $e->getMessage());
}

// Enviar como descarga CSV
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Pragma: no-cache');
header('Expires: 0');

$out = fopen('php://output', 'w');
fputs($out, "\xEF\xBB\xBF"); // BOM UTF-8 para Excel
fputcsv($out, $headers, ',');
foreach ($rows as $row) {
    fputcsv($out, $row, ',');
}
fclose($out);
