<?php
/**
 * Página de Impresión del Reporte de Donaciones
 * Archivo: imprimir_reporte.php
 */
require_once 'includes/config.php';

// Verificar sesión
if (!isset($_SESSION['pin_verificado']) || $_SESSION['pin_verificado'] !== true) {
    header("Location: pin_block.php");
    exit;
}

// Funciones auxiliares
function calcular_fechas($filtro) {
    $fecha_inicio = null;
    $fecha_fin = null;
    
    switch ($filtro) {
        case 'hoy':
            $fecha_inicio = date('Y-m-d');
            $fecha_fin = date('Y-m-d');
            break;
        case 'ayer':
            $fecha_inicio = date('Y-m-d', strtotime('-1 day'));
            $fecha_fin = date('Y-m-d', strtotime('-1 day'));
            break;
        case '7dias':
            $fecha_inicio = date('Y-m-d', strtotime('-7 days'));
            $fecha_fin = date('Y-m-d');
            break;
        case '30dias':
            $fecha_inicio = date('Y-m-d', strtotime('-30 days'));
            $fecha_fin = date('Y-m-d');
            break;
        case 'mes_actual':
            $fecha_inicio = date('Y-m-01');
            $fecha_fin = date('Y-m-d');
            break;
        case 'mes_pasado':
            $fecha_inicio = date('Y-m-01', strtotime('-1 month'));
            $fecha_fin = date('Y-m-t', strtotime('-1 month'));
            break;
        default:
            break;
    }
    
    return ['inicio' => $fecha_inicio, 'fin' => $fecha_fin];
}

function obtener_donaciones_detalladas($pdo, $fecha_inicio = null, $fecha_fin = null) {
    $sql = "SELECT d.id, d.monto, d.fecha_donacion, d.estado,
            dn.nombre_completo as donante,
            i.nombre as item
            FROM donaciones d
            LEFT JOIN donantes dn ON d.donante_id = dn.id
            LEFT JOIN items i ON d.item_id = i.id
            WHERE d.estado = 'completada'";
    
    if ($fecha_inicio && $fecha_fin) {
        $sql .= " AND DATE(d.fecha_donacion) BETWEEN :fecha_inicio AND :fecha_fin";
    }
    
    $sql .= " ORDER BY d.fecha_donacion ASC";
    
    try {
        $stmt = $pdo->prepare($sql);
        if ($fecha_inicio && $fecha_fin) {
            $stmt->bindParam(':fecha_inicio', $fecha_inicio);
            $stmt->bindParam(':fecha_fin', $fecha_fin);
        }
        $stmt->execute();
        return $stmt->fetchAll();
    } catch (PDOException $e) {
        error_log("Error en obtener_donaciones_detalladas: " . $e->getMessage());
        return [];
    }
}

function obtener_recaudacion_por_dia($pdo, $fecha_inicio = null, $fecha_fin = null) {
    $sql = "SELECT DATE(fecha_donacion) as fecha,
            COALESCE(SUM(CASE WHEN estado = 'completada' THEN monto ELSE 0 END), 0) as total
            FROM donaciones";
    
    if ($fecha_inicio && $fecha_fin) {
        $sql .= " WHERE DATE(fecha_donacion) BETWEEN :fecha_inicio AND :fecha_fin";
    }
    
    $sql .= " GROUP BY DATE(fecha_donacion) ORDER BY fecha DESC LIMIT 10";
    
    try {
        $stmt = $pdo->prepare($sql);
        if ($fecha_inicio && $fecha_fin) {
            $stmt->bindParam(':fecha_inicio', $fecha_inicio);
            $stmt->bindParam(':fecha_fin', $fecha_fin);
        }
        $stmt->execute();
        return $stmt->fetchAll();
    } catch (PDOException $e) {
        error_log("Error en obtener_recaudacion_por_dia: " . $e->getMessage());
        return [];
    }
}

function obtener_items_donados($pdo, $fecha_inicio = null, $fecha_fin = null) {
    $sql = "SELECT i.nombre, COUNT(d.id) as cantidad
            FROM items i
            LEFT JOIN donaciones d ON i.id = d.item_id AND d.estado = 'completada'";
    
    if ($fecha_inicio && $fecha_fin) {
        $sql .= " WHERE DATE(d.fecha_donacion) BETWEEN :fecha_inicio AND :fecha_fin";
    }
    
    $sql .= " GROUP BY i.id, i.nombre HAVING cantidad > 0 ORDER BY cantidad DESC LIMIT 8";
    
    try {
        $stmt = $pdo->prepare($sql);
        if ($fecha_inicio && $fecha_fin) {
            $stmt->bindParam(':fecha_inicio', $fecha_inicio);
            $stmt->bindParam(':fecha_fin', $fecha_fin);
        }
        $stmt->execute();
        return $stmt->fetchAll();
    } catch (PDOException $e) {
        error_log("Error en obtener_items_donados: " . $e->getMessage());
        return [];
    }
}

// Obtener parámetros
$filtro = $_GET['filtro_fecha'] ?? '30dias';
$fecha_desde = $_GET['fecha_desde'] ?? null;
$fecha_hasta = $_GET['fecha_hasta'] ?? null;

if ($fecha_desde && $fecha_hasta) {
    $fecha_inicio = $fecha_desde;
    $fecha_fin = $fecha_hasta;
} else {
    $fechas = calcular_fechas($filtro);
    $fecha_inicio = $fechas['inicio'];
    $fecha_fin = $fechas['fin'];
}

// Obtener datos
$donaciones_detalladas = obtener_donaciones_detalladas($pdo, $fecha_inicio, $fecha_fin);
$recaudacion_por_dia = obtener_recaudacion_por_dia($pdo, $fecha_inicio, $fecha_fin);
$items_donados = obtener_items_donados($pdo, $fecha_inicio, $fecha_fin);

// Preparar datos para gráficos
$labels_recaudacion = array_map(function($r) { return date('d/m', strtotime($r['fecha'])); }, $recaudacion_por_dia);
$data_recaudacion = array_column($recaudacion_por_dia, 'total');
$max_recaudacion = !empty($data_recaudacion) ? max($data_recaudacion) : 1;

$labels_items = array_column($items_donados, 'nombre');
$data_items = array_column($items_donados, 'cantidad');
$max_items = !empty($data_items) ? max($data_items) : 1;

// Colores para las barras del segundo gráfico (Items Donados)
$colores_items = [
    '#FF6384', // Rojo
    '#36A2EB', // Azul
    '#FFCE56', // Amarillo
    '#4BC0C0', // Verde agua
    '#9966FF', // Púrpura
    '#FF9F40', // Naranja
    '#C9CBCF', // Gris
    '#77DD77'  // Verde claro
];

// Calcular valores del eje Y para recaudación
$y_vals_recaudacion = [];
if ($max_recaudacion > 0) {
    // Redondear a múltiplos de 100 para valores más limpios
    $rounded_max = ceil($max_recaudacion / 100) * 100;
    $step = ceil($rounded_max / 3 / 100) * 100; // 3 pasos más el 0
    
    $y_vals_recaudacion = [
        $rounded_max,
        $step * 2,
        $step,
        0
    ];
} else {
    $y_vals_recaudacion = [0, 0, 0, 0];
}

// Calcular valores del eje Y para items
$y_vals_items = [];
if ($max_items > 0) {
    // Redondear a múltiplos de 5 para valores más limpios
    $rounded_max = ceil($max_items / 5) * 5;
    $step = ceil($rounded_max / 3 / 5) * 5; // 3 pasos más el 0
    
    $y_vals_items = [
        $rounded_max,
        $step * 2,
        $step,
        0
    ];
} else {
    $y_vals_items = [0, 0, 0, 0];
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reporte de Donaciones - Impresión</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: Arial, Helvetica, sans-serif;
            font-size: 11pt;
            line-height: 1.4;
            color: #333;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            padding: 20px;
        }
        
        .container {
            max-width: 850px;
            margin: 0 auto;
            padding: 25px;
            background: white;
            border-radius: 10px;
            box-shadow: 0 10px 40px rgba(0,0,0,0.15);
        }
        
        .header {
            text-align: center;
            margin-bottom: 30px;
            border-bottom: 4px solid #c41e3a;
            padding-bottom: 20px;
            background: linear-gradient(to bottom, #ffffff 0%, #fff5f7 100%);
            padding-top: 15px;
            border-radius: 8px 8px 0 0;
        }
        
        .header .logos {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 20px;
            padding: 0 30px;
            font-size: 20pt;
            font-weight: bold;
        }
        
        .header .logo-left {
            color: #c41e3a;
            text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
        }
        
        .header .logo-right {
            color: #2c3e50;
            text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
        }
        
        .header h1 {
            color: #c41e3a;
            font-size: 28pt;
            margin-bottom: 10px;
            text-decoration: underline;
            text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
        }
        
        .header .corte {
            font-size: 11pt;
            color: #555;
            font-style: italic;
            font-weight: 600;
        }
        
        .section-title {
            font-size: 16pt;
            font-weight: bold;
            color: #2c3e50;
            margin: 30px 0 15px 0;
            border-bottom: 3px solid #34495e;
            padding: 10px 5px;
            background: linear-gradient(to right, #f8f9fa 0%, #ffffff 100%);
            border-radius: 5px 5px 0 0;
        }
        
        .chart-container {
            margin-bottom: 35px;
            page-break-inside: avoid;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            padding: 15px;
            background: white;
            box-shadow: 0 2px 8px rgba(0,0,0,0.08);
        }
        
        /* GRÁFICO DE BARRAS - CORREGIDO */
        .bar-chart {
            display: flex;
            align-items: flex-end;
            height: 220px;
            border-bottom: 3px solid #2c3e50;
            border-left: 3px solid #2c3e50;
            padding: 0 10px 40px 50px;
            position: relative;
            background: linear-gradient(to bottom, #ffffff 0%, #f8f9fa 100%);
            margin: 10px 0;
        }
        
        .bars-container {
            display: flex;
            align-items: flex-end;
            height: 100%;
            width: 100%;
            justify-content: space-around;
            position: relative;
        }
        
        .bar-container {
            flex: 0 0 auto;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: flex-end;
            width: 55px;
            height: 100%;
            position: relative;
        }
        
        .bar {
            width: 45px;
            background: linear-gradient(to top, #c41e3a 0%, #e63950 50%, #ff4757 100%);
            border: 2px solid #8b1429;
            border-radius: 5px 5px 0 0;
            position: relative;
            box-shadow: 0 3px 6px rgba(196, 30, 58, 0.4);
            min-height: 5px;
        }
        
        /* Barras para el segundo gráfico con colores específicos */
        .bar-items {
            background: var(--bar-color);
            border-color: var(--bar-border);
        }
        
        .bar-value {
            position: absolute;
            top: -30px;
            left: 50%;
            transform: translateX(-50%);
            font-size: 10pt;
            font-weight: bold;
            color: #2c3e50;
            white-space: nowrap;
            background: white;
            padding: 3px 6px;
            border-radius: 4px;
            box-shadow: 0 1px 3px rgba(0,0,0,0.2);
            z-index: 10;
            border: 1px solid #ddd;
        }
        
        .bar-label {
            margin-top: 12px;
            font-size: 10pt;
            text-align: center;
            color: #333;
            font-weight: 600;
            max-width: 65px;
            line-height: 1.2;
            height: 35px;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 0 3px;
            word-break: break-word;
            position: absolute;
            bottom: -40px;
            left: 50%;
            transform: translateX(-50%);
        }
        
        /* EJE Y CORREGIDO */
        .chart-y-axis {
            position: absolute;
            left: 5px;
            top: 0;
            bottom: 40px;
            width: 45px;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            font-size: 10pt;
            color: #555;
            font-weight: bold;
        }
        
        .y-label {
            text-align: right;
            padding-right: 6px;
            background: white;
            border-radius: 3px;
            padding: 2px 4px;
            border: 1px solid #ddd;
        }
        
        /* LEYENDA MEJORADA */
        .legend-container {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 10px;
            margin-top: 20px;
            padding: 15px;
            background: #f8f9fa;
            border-radius: 8px;
            border: 2px solid #e0e0e0;
            page-break-inside: avoid;
        }
        
        .legend-item {
            display: flex;
            align-items: center;
            padding: 6px 10px;
            background: white;
            border-radius: 5px;
            border: 1px solid #ccc;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        
        .legend-color {
            width: 20px;
            height: 20px;
            border-radius: 4px;
            margin-right: 10px;
            border: 2px solid rgba(0,0,0,0.3);
            flex-shrink: 0;
        }
        
        .legend-text {
            font-size: 11pt;
            color: #333;
            font-weight: 600;
            flex-grow: 1;
        }
        
        .link-section {
            text-align: center;
            margin: 25px 0;
            font-size: 10pt;
            color: #0066cc;
            padding: 15px;
            background: linear-gradient(to right, #e3f2fd 0%, #ffffff 50%, #e3f2fd 100%);
            border-radius: 8px;
            border: 2px dashed #0066cc;
            font-weight: 600;
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 15px;
            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            border-radius: 8px;
            overflow: hidden;
        }
        
        th {
            background: linear-gradient(to bottom, #2c3e50 0%, #34495e 100%);
            color: white;
            padding: 12px 10px;
            text-align: left;
            font-size: 11pt;
            border: none;
            font-weight: bold;
        }
        
        td {
            padding: 10px;
            border: 1px solid #ddd;
            font-size: 10pt;
        }
        
        tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        tr:hover {
            background-color: #e8f4f8;
        }
        
        .footer {
            margin-top: 40px;
            text-align: center;
            font-size: 9pt;
            color: #555;
            border-top: 2px solid #c41e3a;
            padding-top: 15px;
            background: linear-gradient(to bottom, #ffffff 0%, #fff5f7 100%);
            border-radius: 0 0 8px 8px;
            padding-bottom: 15px;
            font-weight: 600;
        }
        
        .no-print {
            position: fixed;
            top: 10px;
            right: 10px;
            z-index: 1000;
        }
        
        .no-print button {
            background: #c41e3a;
            color: white;
            border: none;
            padding: 12px 24px;
            border-radius: 5px;
            font-size: 14px;
            cursor: pointer;
            box-shadow: 0 2px 5px rgba(0,0,0,0.2);
            margin: 0 5px;
        }
        
        .no-print button:hover {
            background: #a71e2a;
        }
        
        @media print {
            .no-print {
                display: none !important;
            }
            
            body {
                background: white;
                padding: 10px;
            }
            
            .container {
                box-shadow: none;
                padding: 15px;
                max-width: 100%;
            }
            
            .chart-container {
                page-break-inside: avoid;
                border: 2px solid #999;
            }
            
            .legend-container {
                border: 2px solid #666;
                background: #f0f0f0;
                grid-template-columns: repeat(2, 1fr);
            }
            
            .legend-item {
                background: white;
                border: 2px solid #333;
                padding: 8px 12px;
            }
            
            .legend-text {
                font-weight: bold;
                color: #000;
                font-size: 12pt;
            }
            
            .legend-color {
                width: 22px;
                height: 22px;
                border: 2px solid #000;
            }
            
            table {
                page-break-inside: auto;
            }
            
            tr {
                page-break-inside: avoid;
                page-break-after: auto;
            }
            
            .bar-chart {
                height: 200px;
                border-bottom: 3px solid #000;
                border-left: 3px solid #000;
            }
            
            .bar {
                border: 2px solid #000;
            }
            
            .bar-value {
                border: 1px solid #000;
                font-weight: bold;
            }
            
            .section-title {
                border-bottom: 3px solid #000;
            }
        }
    </style>
</head>
<body>
    <div class="no-print">
        <button onclick="window.print()"><i>🖨️</i> Imprimir / Guardar PDF</button>
        <button onclick="window.close()"><i>❌</i> Cerrar</button>
    </div>
    
    <div class="container">
        <!-- HEADER -->
        <div class="header">
            <div class="logos">
                <div class="logo-left">❤️ Ilumina el Mundo</div>
                <div class="logo-right">🌟 Million</div>
            </div>
            <h1>Reporte de Avance de Donaciones</h1>
            <p class="corte">Corte: <?php echo date('d/m/Y H:i'); ?></p>
        </div>
        
        <!-- GRÁFICO 1: RECAUDACIÓN POR FECHAS -->
        <div class="chart-container">
            <div class="section-title">📊 Recaudación por fechas (en soles)</div>
            <?php if (!empty($recaudacion_por_dia)): ?>
            <div class="bar-chart">
                <!-- Eje Y -->
                <div class="chart-y-axis">
                    <?php foreach ($y_vals_recaudacion as $y_val): ?>
                    <div class="y-label"><?php echo number_format($y_val, 0); ?></div>
                    <?php endforeach; ?>
                </div>
                
                <!-- Contenedor de barras -->
                <div class="bars-container">
                    <?php 
                    // Ordenar de más reciente a más antiguo (izquierda a derecha)
                    $reversed_labels = array_reverse($labels_recaudacion);
                    $reversed_data = array_reverse($data_recaudacion);
                    
                    foreach ($reversed_labels as $index => $label): 
                        $valor = $reversed_data[$index];
                        $altura_pct = $max_recaudacion > 0 ? ($valor / $max_recaudacion * 100) : 0;
                        // Asegurar altura mínima para barras pequeñas
                        if ($valor > 0 && $altura_pct < 5) $altura_pct = 5;
                    ?>
                        <div class="bar-container">
                            <div class="bar" style="height: <?php echo $altura_pct; ?>%;">
                                <span class="bar-value">S/ <?php echo number_format($valor, 0); ?></span>
                            </div>
                            <span class="bar-label"><?php echo $label; ?></span>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>
            <?php else: ?>
            <p style="text-align: center; color: #999; padding: 20px;">No hay datos de recaudación para mostrar</p>
            <?php endif; ?>
        </div>
        
        <!-- GRÁFICO 2: ITEMS DONADOS -->
        <div class="chart-container">
            <div class="section-title">🎁 Items Donados (cantidad)</div>
            <?php if (!empty($items_donados)): ?>
            <div class="bar-chart">
                <!-- Eje Y -->
                <div class="chart-y-axis">
                    <?php foreach ($y_vals_items as $y_val): ?>
                    <div class="y-label"><?php echo $y_val; ?></div>
                    <?php endforeach; ?>
                </div>
                
                <!-- Contenedor de barras -->
                <div class="bars-container">
                    <?php foreach ($labels_items as $index => $label): 
                        $valor = $data_items[$index];
                        $altura_pct = $max_items > 0 ? ($valor / $max_items * 100) : 0;
                        // Asegurar altura mínima para barras pequeñas
                        if ($valor > 0 && $altura_pct < 5) $altura_pct = 5;
                        $color = $colores_items[$index % count($colores_items)];
                        $color_borde = $color;
                    ?>
                        <div class="bar-container">
                            <div class="bar bar-items" style="height: <?php echo $altura_pct; ?>%; background: <?php echo $color; ?>; border-color: <?php echo $color_borde; ?>;">
                                <span class="bar-value"><?php echo $valor; ?></span>
                            </div>
                            <span class="bar-label">
                                <?php 
                                    // Abreviar etiquetas largas
                                    if (strlen($label) > 15) {
                                        $words = explode(' ', $label);
                                        if (count($words) > 1) {
                                            $abbr = '';
                                            foreach ($words as $word) {
                                                $abbr .= substr($word, 0, 3) . '.';
                                            }
                                            echo $abbr;
                                        } else {
                                            echo substr($label, 0, 12) . '...';
                                        }
                                    } else {
                                        echo $label;
                                    }
                                ?>
                            </span>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>
            
            <!-- LEYENDA -->
            <div class="legend-container">
                <?php foreach ($labels_items as $index => $label): 
                    $color = $colores_items[$index % count($colores_items)];
                ?>
                    <div class="legend-item">
                        <div class="legend-color" style="background: <?php echo $color; ?>;"></div>
                        <span class="legend-text"><?php echo $label; ?> (<?php echo $data_items[$index]; ?>)</span>
                    </div>
                <?php endforeach; ?>
            </div>
            <?php else: ?>
            <p style="text-align: center; color: #999; padding: 20px;">No hay datos de items para mostrar</p>
            <?php endif; ?>
        </div>
        
        <!-- LINK DE REFERENCIA -->
        <div class="link-section">
            📍 Véase más en: <strong>https://www.endi.pe/proyecto-donaciones/reporte.php</strong> | PIN: <strong>135590</strong>
        </div>
        
        <!-- DETALLE DE DONACIONES -->
        <div class="section-title">📋 Detalle de donaciones completadas:</div>
        <table>
            <thead>
                <tr>
                    <th>Item</th>
                    <th style="text-align: center;">Monto (S/)</th>
                    <th style="text-align: center;">Fecha y Hora</th>
                    <th>Donante</th>
                </tr>
            </thead>
            <tbody>
                <?php if (empty($donaciones_detalladas)): ?>
                    <tr><td colspan="4" style="text-align: center; padding: 20px; color: #999;">No hay donaciones completadas en este período</td></tr>
                <?php else: ?>
                    <?php 
                    $total_general = 0;
                    foreach ($donaciones_detalladas as $donacion): 
                        $total_general += $donacion['monto'];
                    ?>
                    <tr>
                        <td><?php echo htmlspecialchars($donacion['item']); ?></td>
                        <td style="text-align: center;"><strong>S/ <?php echo number_format($donacion['monto'], 2); ?></strong></td>
                        <td style="text-align: center;"><?php echo date('d/m/Y H:i', strtotime($donacion['fecha_donacion'])); ?></td>
                        <td><?php echo htmlspecialchars($donacion['donante']); ?></td>
                    </tr>
                    <?php endforeach; ?>
                    <tr style="background-color: #e8f4f8; font-weight: bold;">
                        <td colspan="1" style="text-align: right; padding: 12px;"><strong>TOTAL RECAUDADO:</strong></td>
                        <td style="text-align: center; color: #27ae60; font-size: 11pt;"><strong>S/ <?php echo number_format($total_general, 2); ?></strong></td>
                        <td colspan="2" style="text-align: center;"><strong><?php echo count($donaciones_detalladas); ?> donaciones</strong></td>
                    </tr>
                <?php endif; ?>
            </tbody>
        </table>
        
        <!-- FOOTER -->
        <div class="footer">
            💻 Desarrollado por <strong>Endi Technologies</strong> en alianza con <strong>Million Perú</strong><br>
            Visítanos en: https://www.endi.pe/
        </div>
    </div>
</body>
</html>