<?php
/**
 * Herramienta para gestionar las notificaciones de WhatsApp y limpiar duplicados
 */

require_once 'includes/db.php';

// Función para mostrar mensajes formateados
function showMessage($message, $type = 'info') {
    $color = 'black';
    switch ($type) {
        case 'success':
            $color = 'green';
            break;
        case 'error':
            $color = 'red';
            break;
        case 'warning':
            $color = 'orange';
            break;
    }
    echo "<div style='color: $color; margin: 10px 0;'>" . htmlspecialchars($message) . "</div>";
}

?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gestión de Notificaciones WhatsApp</title>
    <style>
        body {
            font-family: 'Segoe UI', Arial, sans-serif;
            margin: 20px;
            line-height: 1.6;
        }
        .container {
            max-width: 900px;
            margin: 0 auto;
        }
        h1, h2 {
            border-bottom: 1px solid #eee;
            padding-bottom: 10px;
            margin-top: 30px;
        }
        .button {
            display: inline-block;
            padding: 8px 16px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            text-decoration: none;
            margin: 5px 0;
        }
        .button.danger {
            background-color: #f44336;
        }
        .button:hover {
            opacity: 0.9;
        }
        pre {
            background-color: #f5f5f5;
            padding: 10px;
            border-radius: 4px;
            overflow-x: auto;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        tr:nth-child(even) {
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Gestión de Notificaciones WhatsApp</h1>
        
        <?php
        // Procesar acciones
        if (isset($_GET['action'])) {
            $action = $_GET['action'];
            
            try {
                $db = new Database();
                
                switch ($action) {
                    case 'reset_notification_status':
                        // Restablecer estado de notificación para un pedido específico
                        if (isset($_GET['pedido_id'])) {
                            $pedido_id = $_GET['pedido_id'];
                            
                            // Obtener el pedido para actualizar metadata
                            $stmt = $db->prepare("SELECT id_pedido_comercio, hash_pagopar, metadata FROM pedidos_pagopar WHERE id = ?");
                            $stmt->execute([$pedido_id]);
                            $pedido = $stmt->fetch(PDO::FETCH_ASSOC);
                            
                            if ($pedido) {
                                // Actualizar metadatos
                                $metadata = $pedido['metadata'] ? json_decode($pedido['metadata'], true) : [];
                                $metadata['notificaciones_enviadas'] = false;
                                $metadata['fecha_reset'] = date('Y-m-d H:i:s');
                                
                                $stmt = $db->prepare("UPDATE pedidos_pagopar SET metadata = ? WHERE id = ?");
                                $stmt->execute([json_encode($metadata), $pedido_id]);
                                
                                // Eliminar del archivo de control
                                if (file_exists('logs/notificaciones_enviadas.log')) {
                                    $lines = file('logs/notificaciones_enviadas.log', FILE_IGNORE_NEW_LINES);
                                    $new_lines = array_filter($lines, function($line) use ($pedido) {
                                        return $line !== 'NOTIFICADO-' . $pedido['hash_pagopar'];
                                    });
                                    file_put_contents('logs/notificaciones_enviadas.log', implode("\n", $new_lines) . "\n");
                                }
                                
                                showMessage("Estado de notificación restablecido para el pedido " . $pedido['id_pedido_comercio'], 'success');
                            } else {
                                showMessage("Pedido no encontrado", 'error');
                            }
                        }
                        break;
                        
                    case 'clean_duplicates':
                        // Limpiar el archivo de control de notificaciones
                        if (file_exists('logs/notificaciones_enviadas.log')) {
                            // Hacer una copia de seguridad
                            copy('logs/notificaciones_enviadas.log', 'logs/notificaciones_enviadas_' . date('YmdHis') . '.bak');
                            
                            // Leer y eliminar duplicados
                            $lines = file('logs/notificaciones_enviadas.log', FILE_IGNORE_NEW_LINES);
                            $unique_lines = array_unique($lines);
                            
                            // Guardar solo líneas únicas
                            file_put_contents('logs/notificaciones_enviadas.log', implode("\n", $unique_lines) . "\n");
                            
                            showMessage("Archivo de control de notificaciones limpiado. Se eliminaron " . 
                                      (count($lines) - count($unique_lines)) . " entradas duplicadas.", 'success');
                        } else {
                            showMessage("El archivo de control no existe", 'warning');
                        }
                        break;
                }
            } catch (Exception $e) {
                showMessage("Error: " . $e->getMessage(), 'error');
            }
        }
        
        // Mostrar lista de pedidos pagados recientes
        try {
            $db = new Database();
            
            echo "<h2>Pedidos Pagados Recientes</h2>";
            
            $stmt = $db->prepare("
                SELECT p.*, 
                       (CASE WHEN p.metadata IS NOT NULL THEN 
                           JSON_EXTRACT(p.metadata, '$.notificaciones_enviadas') 
                       ELSE NULL END) as notificaciones_enviadas
                FROM pedidos_pagopar p
                WHERE p.estado = 'pagado'
                ORDER BY p.fecha_pago DESC
                LIMIT 15
            ");
            $stmt->execute();
            $pedidos = $stmt->fetchAll(PDO::FETCH_ASSOC);
            
            if (count($pedidos) > 0) {
                echo "<table>";
                echo "<tr>
                        <th>ID</th>
                        <th>Pedido</th>
                        <th>Fecha Pago</th>
                        <th>Monto</th>
                        <th>Notificaciones</th>
                        <th>Acciones</th>
                      </tr>";
                
                foreach ($pedidos as $pedido) {
                    $notificacion_status = "Desconocido";
                    $metadata = json_decode($pedido['metadata'] ?? '{}', true);
                    
                    if (isset($metadata['notificaciones_enviadas'])) {
                        $notificacion_status = $metadata['notificaciones_enviadas'] ? 
                            "<span style='color:green'>Enviadas</span>" : 
                            "<span style='color:red'>No enviadas</span>";
                            
                        if (isset($metadata['fecha_notificacion'])) {
                            $notificacion_status .= "<br><small>" . $metadata['fecha_notificacion'] . "</small>";
                        }
                    }
                    
                    echo "<tr>";
                    echo "<td>" . htmlspecialchars($pedido['id']) . "</td>";
                    echo "<td>" . htmlspecialchars($pedido['id_pedido_comercio']) . "</td>";
                    echo "<td>" . htmlspecialchars($pedido['fecha_pago']) . "</td>";
                    echo "<td>" . number_format($pedido['monto_total'], 0, ',', '.') . "</td>";
                    echo "<td>" . $notificacion_status . "</td>";
                    echo "<td><a href='?action=reset_notification_status&pedido_id=" . $pedido['id'] . "' class='button'>Reenviar</a></td>";
                    echo "</tr>";
                }
                
                echo "</table>";
            } else {
                echo "<p>No hay pedidos pagados recientes</p>";
            }
            
            // Verificar archivos de control
            echo "<h2>Archivos de Control</h2>";
            
            echo "<h3>Control de Notificaciones</h3>";
            if (file_exists('logs/notificaciones_enviadas.log')) {
                $lines = file('logs/notificaciones_enviadas.log', FILE_IGNORE_NEW_LINES);
                $count = count($lines);
                $unique_count = count(array_unique($lines));
                
                echo "<p>Total de registros: $count (Únicos: $unique_count)";
                
                if ($count > $unique_count) {
                    echo " - <a href='?action=clean_duplicates' class='button danger'>Limpiar Duplicados</a>";
                }
                
                echo "</p>";
                
                echo "<pre>" . implode("\n", array_slice($lines, -10)) . "</pre>";
            } else {
                echo "<p>El archivo de control no existe</p>";
            }
            
        } catch (Exception $e) {
            showMessage("Error: " . $e->getMessage(), 'error');
        }
        ?>
        
        <h2>Opciones Adicionales</h2>
        <p><a href="probar_whatsapp.php" class="button">Herramienta de Diagnóstico WhatsApp</a></p>
    </div>
</body>
</html>