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

$db = new Database();
$configQuery = $db->query("SELECT * FROM configuracion")->fetch(PDO::FETCH_ASSOC);

// Cargar configuración de PagoPar
$pagoparConfig = require 'pagopar_config.php';

// Obtener parámetros de la URL (Pagopar puede enviar datos por GET)
$hash_pagopar = $_GET['hash'] ?? $_SESSION['pagopar_hash'] ?? null;

// Si no hay hash en GET, intentar extraerlo de la URL (para manejar URLs concatenadas de PagoPar)
if (!$hash_pagopar) {
    $request_uri = $_SERVER['REQUEST_URI'] ?? '';
    
    // Intentar extraer hash concatenado después del nombre del archivo
    if (preg_match('/resultado_pago_pagopar\.php([a-fA-F0-9]{40,})/', $request_uri, $matches)) {
        $hash_pagopar = $matches[1];
    }
    // También intentar desde el final de la URL
    elseif (preg_match('/([a-fA-F0-9]{40,})(?:\?.*)?$/', $request_uri, $matches)) {
        $hash_pagopar = $matches[1];
    }
}

$id_pedido = $_GET['pedido'] ?? $_SESSION['pagopar_id_pedido'] ?? null;
$estado = $_GET['estado'] ?? 'desconocido';


// Buscar el pedido en la base de datos
$pedido = null;
if ($hash_pagopar) {
    $stmt = $db->prepare("SELECT * FROM pedidos_pagopar WHERE hash_pagopar = ?");
    $stmt->execute([$hash_pagopar]);
    $pedido = $stmt->fetch(PDO::FETCH_ASSOC);
    
    // ✅ PASO 3: CONSULTAR ESTADO EN LA API DE PAGOPAR
    if ($pedido) {
        // Generar tokens según formato validado en diagnóstico
        $token_consulta = sha1($pagoparConfig['private_key'] . "CONSULTA");
        // IMPORTANTE: NO aplicar SHA1 a la clave pública, usar directamente
        $token_publico = $pagoparConfig['public_key'];
        
        // Log para verificar los tokens
        error_log("PASO 3 - DEBUG TOKENS: Private Key: {$pagoparConfig['private_key']}, Public Key: {$pagoparConfig['public_key']}");
        error_log("PASO 3 - DEBUG TOKENS: Token Consulta: $token_consulta, Token Público: $token_publico");
        
        // Estructura exacta validada por diagnóstico
        $consulta_data = [
            'hash_pedido' => $hash_pagopar,
            'token' => $token_consulta,
            'token_publico' => $token_publico
        ];
        
        // Log de los datos que se enviarán
        error_log("PASO 3 - DEBUG JSON: " . json_encode($consulta_data));
        
        // Realizar consulta a PagoPar API
        $ch = curl_init("https://api.pagopar.com/api/pedidos/1.1/traer");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($consulta_data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Accept: application/json'
        ]);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        
        $consulta_response = curl_exec($ch);
        $consulta_http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $curl_error = curl_error($ch);
        curl_close($ch);
        
        // Log de la consulta con información completa
        error_log("PASO 3 - CONSULTA COMPLETA");
        error_log("PASO 3 - URL: https://api.pagopar.com/api/pedidos/1.1/traer");
        error_log("PASO 3 - HTTP Code: $consulta_http_code");
        error_log("PASO 3 - Error cURL: " . ($curl_error ? $curl_error : "Ninguno"));
        error_log("PASO 3 - Respuesta: $consulta_response");
        
        $consulta_json = json_decode($consulta_response, true);
        
        // Si la consulta fue exitosa, actualizar datos del pedido
        if ($consulta_json && isset($consulta_json['respuesta']) && $consulta_json['respuesta'] === true) {
            error_log("PASO 3 - CONSULTA EXITOSA!");
            
            if (isset($consulta_json['resultado']) && is_array($consulta_json['resultado']) && count($consulta_json['resultado']) > 0) {
                $resultado_pagopar = $consulta_json['resultado'][0];
                
                error_log("PASO 3 - Datos del pedido: " . json_encode($resultado_pagopar));
                
                // Actualizar estado según respuesta de PagoPar
                if (isset($resultado_pagopar['pagado']) && $resultado_pagopar['pagado'] === true) {
                    $pedido['estado'] = 'pagado';
                    $pedido['forma_pago'] = $resultado_pagopar['forma_pago'] ?? 'PagoPar';
                    $pedido['fecha_pago'] = $resultado_pagopar['fecha_pago'] ?? date('Y-m-d H:i:s');
                    
                    error_log("PASO 3 - PEDIDO PAGADO! Actualizando base de datos...");
                    
                    // Actualizar en base de datos
                    $stmt_update = $db->prepare("
                        UPDATE pedidos_pagopar 
                        SET estado = 'pagado',
                            forma_pago = ?,
                            fecha_pago = ?,
                            fecha_actualizacion = NOW()
                        WHERE hash_pagopar = ?
                    ");
                    $stmt_update->execute([
                        $pedido['forma_pago'],
                        $pedido['fecha_pago'],
                        $hash_pagopar
                    ]);
                    
                    error_log("PASO 3 - Base de datos actualizada correctamente!");
                } else {
                    error_log("PASO 3 - El pedido NO está pagado según PagoPar");
                }
            }
        } else {
            $error_msg = $consulta_json['resultado'] ?? "Error desconocido";
            error_log("PASO 3 - ERROR EN CONSULTA: $error_msg");
        }
    } else {
        error_log("PASO 3 - No se encontró el pedido en base de datos con hash: $hash_pagopar");
    }
}

// Si hay parámetros en la URL, el usuario acaba de regresar de Pagopar
// Verificar y actualizar el estado del pedido
if ($pedido && ($estado !== 'desconocido' || isset($_GET['hash']))) {
    // El usuario regresó de Pagopar - verificar si el pago fue confirmado
    // Pagopar puede enviar parámetros adicionales
    $estado_url = $_GET['estado'] ?? '';
    $monto_pagado = $_GET['monto'] ?? $pedido['monto_total'];
    
    // Si Pagopar indica que el pago fue exitoso, actualizar y notificar
    if ($estado_url === 'success' || $estado_url === 'pagado' || $estado_url === 'confirmado' || 
        (empty($estado_url) && $pedido['estado'] === 'pendiente')) {
        
        // Actualizar estado del pedido a pagado
        $stmt = $db->prepare("
            UPDATE pedidos_pagopar 
            SET estado = 'pagado', 
                monto_pagado = ?,
                fecha_pago = NOW(),
                fecha_actualizacion = NOW()
            WHERE hash_pagopar = ? AND estado = 'pendiente'
        ");
        
        $filas_actualizadas = $stmt->execute([$monto_pagado, $hash_pagopar]);
        
        if ($filas_actualizadas && $stmt->rowCount() > 0) {
            // El pedido se actualizó - enviar notificación WhatsApp
            $pedido_para_notificacion = [
                'id_pedido_comercio' => $pedido['id_pedido_comercio'],
                'monto_total' => $monto_pagado,
                'forma_pago' => 'Pagopar',
                'datos_comprador' => $pedido['datos_comprador'],
                'datos_productos' => $pedido['datos_productos']
            ];
            
            $resultado_whatsapp = notificarPedidoAdmin($pedido_para_notificacion);
            
            // NUEVO: Enviar WhatsApp de confirmación al cliente
            $resultado_whatsapp_cliente = notificarPedidoCliente($pedido_para_notificacion);
            
            // Actualizar el array $pedido para reflejar el nuevo estado
            $pedido['estado'] = 'pagado';
            $pedido['monto_pagado'] = $monto_pagado;
        }
    }
}

// Determinar el estado del pago
$pago_exitoso = false;
$mensaje = '';
$icono = '';
$color = '';

if ($pedido) {
    switch (strtolower($pedido['estado'])) {
        case 'pagado':
        case 'confirmado':
            $pago_exitoso = true;
            $mensaje = '¡Pago realizado con éxito!';
            $icono = 'fa-check-circle';
            $color = '#28a745';
            
            // Limpiar carrito si el pago fue exitoso
            $_SESSION['carrito'] = [];
            break;
            
        case 'pendiente':
            $mensaje = 'Pago pendiente de confirmación';
            $icono = 'fa-clock';
            $color = '#ffc107';
            break;
            
        case 'cancelado':
        case 'rechazado':
            $mensaje = 'El pago fue cancelado o rechazado';
            $icono = 'fa-times-circle';
            $color = '#dc3545';
            break;
            
        default:
            $mensaje = 'Estado del pago: ' . ucfirst($pedido['estado']);
            $icono = 'fa-info-circle';
            $color = '#6c757d';
    }
} else {
    $mensaje = 'No se pudo verificar el estado del pago';
    $icono = 'fa-exclamation-triangle';
    $color = '#dc3545';
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <?php
    // Modo oscuro
    require_once 'includes/dark_mode.php';
    ?>
    <meta name="color-scheme" content="light dark">
    <?php echo getDarkModeStyles(); ?>
    
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Resultado del Pago - <?= htmlspecialchars($configQuery['nombre_sitio']) ?></title>
    <link rel="icon" type="image/x-icon" href="uploads/config/<?php echo $configQuery['favicon']; ?>">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        body {
            font-family: 'Segoe UI', system-ui, sans-serif;
            background: #f5f5f5;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
        }
        .result-container {
            background: white;
            border-radius: 12px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.1);
            padding: 40px;
            max-width: 500px;
            text-align: center;
        }
        .result-icon {
            font-size: 80px;
            margin-bottom: 20px;
        }
        .result-title {
            font-size: 24px;
            font-weight: bold;
            margin-bottom: 15px;
        }
        .result-details {
            background: #f8f9fa;
            border-radius: 8px;
            padding: 20px;
            margin: 20px 0;
            text-align: left;
        }
        .detail-row {
            display: flex;
            justify-content: space-between;
            padding: 8px 0;
            border-bottom: 1px solid #dee2e6;
        }
        .detail-row:last-child {
            border-bottom: none;
        }
        .detail-label {
            font-weight: bold;
            color: #6c757d;
        }
        .detail-value {
            color: #212529;
        }
        .btn-container {
            margin-top: 30px;
            display: flex;
            gap: 10px;
            justify-content: center;
            flex-wrap: wrap;
        }
        .btn {
            padding: 12px 24px;
            border-radius: 8px;
            text-decoration: none;
            font-weight: 500;
            transition: all 0.3s ease;
            display: inline-flex;
            align-items: center;
            gap: 8px;
        }
        .btn-primary {
            background: #007bff;
            color: white;
        }
        .btn-primary:hover {
            background: #0056b3;
        }
        .btn-secondary {
            background: #6c757d;
            color: white;
        }
        .btn-secondary:hover {
            background: #545b62;
        }
        .btn-success {
            background: #28a745;
            color: white;
        }
        .btn-success:hover {
            background: #218838;
        }
    </style>
</head>
<body>
    <div class="result-container">
        <div class="result-icon" style="color: <?= $color ?>;">
            <i class="fas <?= $icono ?>"></i>
        </div>
        
        <h1 class="result-title" style="color: <?= $color ?>;">
            <?= $mensaje ?>
        </h1>
        
        <?php if ($pedido): ?>
            <div class="result-details">
                <div class="detail-row">
                    <span class="detail-label">N° de Pedido:</span>
                    <span class="detail-value"><?= htmlspecialchars($pedido['id_pedido_comercio']) ?></span>
                </div>
                <?php if ($pedido['pedido_pagopar_id']): ?>
                <div class="detail-row">
                    <span class="detail-label">N° Pagopar:</span>
                    <span class="detail-value"><?= htmlspecialchars($pedido['pedido_pagopar_id']) ?></span>
                </div>
                <?php endif; ?>
                <div class="detail-row">
                    <span class="detail-label">Monto:</span>
                    <span class="detail-value">
                        <?= $configQuery['moneda'] ?? 'Gs.' ?> 
                        <?= number_format($pedido['monto_total'], 0, ',', '.') ?>
                    </span>
                </div>
                <div class="detail-row">
                    <span class="detail-label">Estado:</span>
                    <span class="detail-value"><?= ucfirst($pedido['estado']) ?></span>
                </div>
                <?php if ($pedido['fecha_pago']): ?>
                <div class="detail-row">
                    <span class="detail-label">Fecha de Pago:</span>
                    <span class="detail-value">
                        <?= date('d/m/Y H:i', strtotime($pedido['fecha_pago'])) ?>
                    </span>
                </div>
                <?php endif; ?>
                <?php if ($pedido['forma_pago']): ?>
                <div class="detail-row">
                    <span class="detail-label">Forma de Pago:</span>
                    <span class="detail-value"><?= htmlspecialchars($pedido['forma_pago']) ?></span>
                </div>
                <?php endif; ?>
            </div>
            
            <?php if ($pago_exitoso): ?>
                <p style="color: #28a745; margin: 20px 0;">
                    <i class="fas fa-envelope"></i> 
                    Se ha enviado un comprobante a tu correo electrónico.
                </p>
            <?php endif; ?>
        <?php endif; ?>
        
        <div class="btn-container">
            <a href="https://<?= $_SERVER['HTTP_HOST'] ?>/index.php" class="btn btn-primary">
                <i class="fas fa-home"></i>
                Volver al inicio
            </a>
            
            <?php if ($pago_exitoso && $pedido): ?>
                <a href="ver_pedido_pagopar.php?id=<?= $pedido['id'] ?>" class="btn btn-success">
                    <i class="fas fa-receipt"></i>
                    Ver detalles
                </a>
            <?php elseif (!$pago_exitoso): ?>
                <a href="carrito.php" class="btn btn-secondary">
                    <i class="fas fa-shopping-cart"></i>
                    Ver carrito
                </a>
            <?php endif; ?>
        </div>
    </div>
</body>
</html>
