<?php
/**
 * Webhook alternativo para PagoPar - Múltiples formatos de respuesta
 * Este archivo prueba diferentes tipos de respuesta que PagoPar podría esperar
 */

require_once 'includes/db.php';

// Verificar si es una redirección del usuario (GET con hash) o notificación (POST)
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    // Redirigir igual que el webhook principal
    $hash = '';
    
    if (isset($_GET['hash'])) {
        $hash = $_GET['hash'];
    } elseif (preg_match('/webhook_pagopar_alt\.php([a-zA-Z0-9]+)/', $_SERVER['REQUEST_URI'], $matches)) {
        $hash = $matches[1];
    }
    
    if (!empty($hash)) {
        $https_url = "https://" . $_SERVER['HTTP_HOST'] . "/resultado_pago_pagopar.php?hash=" . urlencode($hash);
        header("Location: " . $https_url);
        exit();
    } else {
        $https_url = "https://" . $_SERVER['HTTP_HOST'] . "/carrito.php?error=hash_invalido";
        header("Location: " . $https_url);
        exit();
    }
}

// Procesar notificación
$input = file_get_contents('php://input');
$data = json_decode($input, true);

// Validar que se recibieron datos
if (empty($data)) {
    http_response_code(400);
    echo "No data received";
    exit();
}

// Log simple
if (!is_dir('logs')) {
    mkdir('logs', 0755, true);
}
$log_entry = date('Y-m-d H:i:s') . " - Webhook ALT - Datos: " . json_encode($data) . "\n";
file_put_contents('logs/pagopar_webhook_alt.log', $log_entry, FILE_APPEND | LOCK_EX);

$db = new Database();

try {
    // Procesar datos de PagoPar (formato oficial)
    if (isset($data['respuesta']) && $data['respuesta'] === true && isset($data['resultado'])) {
        $resultado_data = $data['resultado'][0] ?? null;
        
        if ($resultado_data) {
            $id_pedido_comercio = $resultado_data['numero_pedido'] ?? null;
            $hash_pagopar = $resultado_data['hash_pedido'] ?? $resultado_data['token'] ?? null;
            $monto_pagado = $resultado_data['monto'] ?? 0;
            $estado = $resultado_data['pagado'] ? 'pagado' : ($resultado_data['cancelado'] ? 'cancelado' : 'pendiente');
            
            // Buscar pedido
            if ($hash_pagopar) {
                $stmt = $db->prepare("SELECT * FROM pedidos_pagopar WHERE hash_pagopar = ? ORDER BY fecha_creacion DESC LIMIT 1");
                $stmt->execute([$hash_pagopar]);
                $pedido = $stmt->fetch(PDO::FETCH_ASSOC);
                
                if ($pedido) {
                    // Actualizar pedido
                    $stmt = $db->prepare("UPDATE pedidos_pagopar SET estado = ?, monto_pagado = ?, datos_notificacion = ?, fecha_actualizacion = NOW() WHERE id = ?");
                    $stmt->execute([$estado, $monto_pagado, json_encode($data), $pedido['id']]);
                }
            }
        }
    }
    
    // Respuesta JSON que PagoPar espera
    http_response_code(200);
    header('Content-Type: application/json; charset=utf-8');
    
    $response = [
        'success' => true,
        'status' => 'processed',
        'message' => 'Notification received successfully',
        'timestamp' => date('Y-m-d H:i:s')
    ];
    
    echo json_encode($response);
    
} catch (Exception $e) {
    http_response_code(500);
    header('Content-Type: text/plain');
    echo "ERROR";
}
?>