<?php
/**
 * Webhook COPIA EXACTA - Responde exactamente lo que recibe pero procesa notificaciones de WhatsApp
 */
require_once 'includes/db.php';
require_once 'includes/whatsapp_sender.php';

$timestamp = date('Y-m-d H:i:s.u');

// Recibir los datos
$input = file_get_contents('php://input');
$data = json_decode($input, true);

// Crear directorio de logs si no existe
if (!is_dir('logs')) {
    mkdir('logs', 0755, true);
}

// Log de los datos recibidos
$log_entry = $timestamp . " - Webhook COPIA EXACTA - Datos recibidos: " . $input . "\n";
file_put_contents('logs/pagopar_webhook.log', $log_entry, FILE_APPEND | LOCK_EX);

// Procesar los datos para enviar notificaciones si corresponde
try {
    $db = new Database();

    if ($data && isset($data['resultado'][0])) {
        $resultado = $data['resultado'][0];
        
        // Verificar si el pago está confirmado
        $pagado = isset($resultado['pagado']) && $resultado['pagado'] === true;
        $hash_pagopar = $resultado['hash_pedido'] ?? $resultado['token'] ?? null;
        $id_pedido_comercio = $resultado['numero_pedido'] ?? null;
        
        if ($pagado && $hash_pagopar) {
            // Buscar el pedido en la base de datos
            $stmt = $db->prepare("
                SELECT * FROM pedidos_pagopar 
                WHERE hash_pagopar = ?
            ");
            $stmt->execute([$hash_pagopar]);
            $pedido = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if ($pedido) {
                // Verificar si ya se enviaron notificaciones para este pedido
                $notificaciones_enviadas = false;
                
                // Verificar en el campo de metadatos del pedido si ya se enviaron notificaciones
                if (isset($pedido['metadata'])) {
                    $metadata = json_decode($pedido['metadata'], true);
                    if (isset($metadata['notificaciones_enviadas']) && $metadata['notificaciones_enviadas'] === true) {
                        $notificaciones_enviadas = true;
                    }
                }
                
                // Actualizar estado del pedido
                $stmt = $db->prepare("
                    UPDATE pedidos_pagopar 
                    SET estado = 'pagado', 
                        monto_pagado = ?, 
                        forma_pago = ?,
                        fecha_pago = ?,
                        datos_notificacion = ?,
                        fecha_actualizacion = NOW()
                    WHERE hash_pagopar = ?
                ");
                
                $stmt->execute([
                    $resultado['monto'] ?? $pedido['monto_total'],
                    $resultado['forma_pago'] ?? 'Pagopar',
                    $resultado['fecha_pago'] ?? date('Y-m-d H:i:s'),
                    $input,
                    $hash_pagopar
                ]);
                
                // Evitar envío duplicado de mensajes
                if (!$notificaciones_enviadas) {
                    // Registrar en un archivo para evitar duplicados (mecanismo adicional de seguridad)
                    $control_file = 'logs/notificaciones_enviadas.log';
                    $notificaciones_previas = file_exists($control_file) ? file($control_file, FILE_IGNORE_NEW_LINES) : [];
                    $hash_control = 'NOTIFICADO-' . $hash_pagopar;
                    
                    if (!in_array($hash_control, $notificaciones_previas)) {
                        // Enviar notificaciones de WhatsApp
                        $pedido_para_notificacion = [
                            'id_pedido_comercio' => $pedido['id_pedido_comercio'],
                            'monto_total' => $resultado['monto'] ?? $pedido['monto_total'],
                            'forma_pago' => $resultado['forma_pago'] ?? 'Pagopar',
                            'datos_comprador' => $pedido['datos_comprador'],
                            'datos_productos' => $pedido['datos_productos']
                        ];
                        
                        // Notificar al administrador
                        $resultado_admin = notificarPedidoAdmin($pedido_para_notificacion);
                        file_put_contents('logs/whatsapp_admin.log', 
                            $timestamp . " - Notificación Admin - Resultado: " . json_encode($resultado_admin) . "\n", 
                            FILE_APPEND | LOCK_EX);
                        
                        // Notificar al cliente
                        $resultado_cliente = notificarPedidoCliente($pedido_para_notificacion);
                        file_put_contents('logs/whatsapp_cliente.log', 
                            $timestamp . " - Notificación Cliente - Resultado: " . json_encode($resultado_cliente) . "\n", 
                            FILE_APPEND | LOCK_EX);
                        
                        // Registrar que se enviaron notificaciones para este pedido
                        file_put_contents($control_file, $hash_control . "\n", FILE_APPEND | LOCK_EX);
                        
                        // Actualizar metadatos del pedido para marcar que se enviaron notificaciones
                        $metadata = isset($pedido['metadata']) ? json_decode($pedido['metadata'], true) : [];
                        $metadata['notificaciones_enviadas'] = true;
                        $metadata['fecha_notificacion'] = date('Y-m-d H:i:s');
                        
                        $stmt = $db->prepare("
                            UPDATE pedidos_pagopar 
                            SET metadata = ?
                            WHERE hash_pagopar = ?
                        ");
                        $stmt->execute([json_encode($metadata), $hash_pagopar]);
                        
                        // Log de envío correcto
                        file_put_contents('logs/webhook_control.log', 
                            $timestamp . " - Notificaciones enviadas para pedido ID: " . $pedido['id_pedido_comercio'] . "\n", 
                            FILE_APPEND | LOCK_EX);
                    } else {
                        // Log de intento duplicado evitado
                        file_put_contents('logs/webhook_control.log', 
                            $timestamp . " - DUPLICADO EVITADO para pedido ID: " . $pedido['id_pedido_comercio'] . "\n", 
                            FILE_APPEND | LOCK_EX);
                    }
                } else {
                    // Log de intento duplicado evitado por metadatos
                    file_put_contents('logs/webhook_control.log', 
                        $timestamp . " - DUPLICADO EVITADO (metadatos) para pedido ID: " . $pedido['id_pedido_comercio'] . "\n", 
                        FILE_APPEND | LOCK_EX);
                }
            }
        }
    }
} catch (Exception $e) {
    // Log del error pero no interrumpir la respuesta
    file_put_contents('logs/webhook_error.log', 
        $timestamp . " - Error en webhook: " . $e->getMessage() . "\n", 
        FILE_APPEND | LOCK_EX);
}

// RESPUESTA INMEDIATA
http_response_code(200);
header('Content-Type: application/json; charset=utf-8');

// Headers de tracing
if (isset($_SERVER['HTTP_TRACEPARENT'])) {
    header('traceparent: ' . $_SERVER['HTTP_TRACEPARENT']);
}
if (isset($_SERVER['HTTP_TRACESTATE'])) {
    header('tracestate: ' . $_SERVER['HTTP_TRACESTATE']);
}

// Enviar la misma estructura de respuesta que recibimos
if ($data && isset($data['resultado'][0])) {
    echo json_encode([$data['resultado'][0]]);
} else {
    // Si no hay datos, respuesta mínima
    echo json_encode([]);
}

// Log de la respuesta
file_put_contents('logs/copia_exacta.log', 
    $timestamp . " - COPIA EXACTA\n" . 
    "Input: " . $input . "\n" .
    "Output: " . json_encode(isset($data['resultado'][0]) ? [$data['resultado'][0]] : []) . "\n" .
    str_repeat("=", 80) . "\n", 
    FILE_APPEND | LOCK_EX
);