<?php
/**
 * Función para enviar mensajes de WhatsApp
 * Basado en el modelo de envia_whats_demo.php
 */

require_once 'db.php';

/**
 * Envía un mensaje de WhatsApp usando la API de waapi.app
 * 
 * @param string $telefono Número de teléfono (sin espacios)
 * @param string $mensaje Mensaje a enviar
 * @param bool $incluir_pie Si incluir el mensaje automático de pie
 * @return array Resultado de la operación ['success' => bool, 'message' => string, 'response' => string]
 */
function enviarWhatsApp($telefono, $mensaje, $incluir_pie = true) {
    try {
        $db = new Database();
        
        // Obtener configuración de WhatsApp desde la base de datos
        $config = $db->query("SELECT whatsapp, instance_id, api_token, sitio_web FROM configuracion LIMIT 1")->fetch(PDO::FETCH_ASSOC);
        
        if (!$config) {
            throw new Exception('No se pudo obtener la configuración de WhatsApp');
        }
        
        // Validar que existan los datos necesarios
        if (empty($config['instance_id']) || empty($config['api_token'])) {
            throw new Exception('Configuración de WhatsApp incompleta (instance_id o api_token faltante)');
        }
        
        // Limpiar número de teléfono - Universal para cualquier país
        // Solo conservar números, eliminar + y 0 inicial si existe
        $tel = preg_replace('/[^0-9]/', '', $telefono); // Solo números
        
        //$tel='595994850808';// Número fijo para pruebas
        
        // Remover 0 del inicio si existe (solo uno)
        if (substr($tel, 0, 1) === '0') {
            $tel = substr($tel, 1);
        }
        
        // Validar que el número tenga al menos 8 dígitos (mínimo internacional)
        if (strlen($tel) < 8) {
            throw new Exception("Número de teléfono muy corto: $telefono (procesado: $tel)");
        }
        
        // Validar que no sea demasiado largo (máximo 15 dígitos según estándar internacional)
        if (strlen($tel) > 15) {
            throw new Exception("Número de teléfono muy largo: $telefono (procesado: $tel)");
        }
        
        // Construir mensaje completo
        $mensaje_completo = $mensaje;
        if ($incluir_pie) {
            $nombre_empresa = $config['sitio_web'] ?? 'Nombre de Comercio';
            $mensaje_completo .= "\n\nAtentamente,\n*" . $nombre_empresa . "*";
        }
        
        // Configurar cURL para enviar mensaje
        $curl = curl_init();
        
        curl_setopt_array($curl, [
            CURLOPT_URL => "https://waapi.app/api/v1/instances/" . $config['instance_id'] . "/client/action/send-message",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => json_encode([
                'chatId' => $tel . '@c.us',
                'message' => $mensaje_completo
            ]),
            CURLOPT_HTTPHEADER => [
                "accept: application/json",
                "authorization: Bearer " . $config['api_token'],
                "content-type: application/json"
            ],
        ]);
        
        $response = curl_exec($curl);
        $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $error = curl_error($curl);
        curl_close($curl);
        
        if ($error) {
            throw new Exception('Error de cURL: ' . $error);
        }
        
        if ($http_code !== 200) {
            throw new Exception('Error HTTP: ' . $http_code . ' - ' . $response);
        }
        
        $response_data = json_decode($response, true);
        
        return [
            'success' => true,
            'message' => 'Mensaje de WhatsApp enviado correctamente',
            'response' => $response_data
        ];
        
    } catch (Exception $e) {
        return [
            'success' => false,
            'message' => 'Error al enviar WhatsApp: ' . $e->getMessage(),
            'response' => null
        ];
    }
}

/**
 * Envía notificación de nuevo pedido al administrador
 * 
 * @param array $pedido_data Datos del pedido de Pagopar
 * @return array Resultado de la operación
 */
function notificarPedidoAdmin($pedido_data) {
    try {
        $db = new Database();
        
        // Obtener número de WhatsApp del administrador
        $config = $db->query("SELECT whatsapp FROM configuracion LIMIT 1")->fetch(PDO::FETCH_ASSOC);
        
        if (!$config || empty($config['whatsapp'])) {
            throw new Exception('No se encontró el número de WhatsApp del administrador');
        }
        
        // Construir mensaje de notificación
        $mensaje = "🎉 *NUEVO PEDIDO CONFIRMADO*\n\n";
        $mensaje .= "💰 *Monto:* Gs. " . number_format($pedido_data['monto_total'], 0, ',', '.') . "\n";
        $mensaje .= "📦 *ID Pedido:* " . $pedido_data['id_pedido_comercio'] . "\n";
        $mensaje .= "💳 *Forma de Pago:* " . ($pedido_data['forma_pago'] ?? 'Pagopar') . "\n";
        $mensaje .= "📅 *Fecha:* " . date('d/m/Y H:i') . "\n\n";
        
        // Agregar datos del comprador si están disponibles
        if (!empty($pedido_data['datos_comprador'])) {
            $comprador = json_decode($pedido_data['datos_comprador'], true);
            if ($comprador) {
                $mensaje .= "👤 *DATOS DEL CLIENTE:*\n";
                $mensaje .= "• Nombre: " . ($comprador['nombre'] ?? 'No especificado') . "\n";
                $mensaje .= "• Email: " . ($comprador['email'] ?? 'No especificado') . "\n";
                $mensaje .= "• Teléfono: " . ($comprador['telefono'] ?? 'No especificado') . "\n";
                $mensaje .= "• Documento: " . ($comprador['documento'] ?? 'No especificado') . "\n";
                if (!empty($comprador['direccion'])) {
                    $mensaje .= "• Dirección: " . $comprador['direccion'] . "\n";
                }
                $mensaje .= "\n";
            }
        }
        
        // Agregar productos si están disponibles
        if (!empty($pedido_data['datos_productos'])) {
            $productos = json_decode($pedido_data['datos_productos'], true);
            if ($productos && is_array($productos)) {
                $mensaje .= "🛍️ *PRODUCTOS:*\n";
                foreach ($productos as $producto) {
                    $mensaje .= "• " . ($producto['nombre'] ?? 'Producto') . "\n";
                    $mensaje .= "  Cantidad: " . ($producto['cantidad'] ?? 1) . "\n";
                    $mensaje .= "  Precio: Gs. " . number_format($producto['precio_total'] ?? 0, 0, ',', '.') . "\n\n";
                }
            }
        }
        
        //$mensaje .= "⚡ Revisar pedidos en el panel de administración.";
        
        // Enviar WhatsApp
        return enviarWhatsApp($config['whatsapp'], $mensaje);
        
    } catch (Exception $e) {
        return [
            'success' => false,
            'message' => 'Error al notificar pedido: ' . $e->getMessage(),
            'response' => null
        ];
    }
}

/**
 * Envía confirmación de pedido al cliente
 * 
 * @param array $pedido_data Datos del pedido de Pagopar
 * @return array Resultado de la operación
 */
function notificarPedidoCliente($pedido_data) {
    try {
        // Obtener datos del comprador
        if (empty($pedido_data['datos_comprador'])) {
            throw new Exception('No se encontraron datos del comprador');
        }
        
        $comprador = json_decode($pedido_data['datos_comprador'], true);
        if (!$comprador || empty($comprador['telefono'])) {
            throw new Exception('No se encontró el número de teléfono del cliente');
        }
        
        // Construir mensaje de confirmación para el cliente
        $mensaje = "✅ *PAGO CONFIRMADO*\n\n";
        $mensaje .= "¡Hola " . ($comprador['nombre'] ?? 'Cliente') . "!\n\n";
        $mensaje .= "Tu pago ha sido procesado exitosamente.\n\n";
        
        $mensaje .= "📦 *DETALLES DEL PEDIDO:*\n";
        $mensaje .= "• ID Pedido: " . $pedido_data['id_pedido_comercio'] . "\n";
        $mensaje .= "• Monto: Gs. " . number_format($pedido_data['monto_total'], 0, ',', '.') . "\n";
        $mensaje .= "• Fecha: " . date('d/m/Y H:i') . "\n\n";
        
        // Agregar productos
        if (!empty($pedido_data['datos_productos'])) {
            $productos = json_decode($pedido_data['datos_productos'], true);
            if ($productos && is_array($productos)) {
                $mensaje .= "🛍️ *TUS PRODUCTOS:*\n";
                foreach ($productos as $producto) {
                    $mensaje .= "• " . ($producto['nombre'] ?? 'Producto') . "\n";
                    $mensaje .= "  Cantidad: " . ($producto['cantidad'] ?? 1) . "\n\n";
                }
            }
        }
        
        $mensaje .= "📧 Pronto recibirás más información sobre la entrega.\n\n";
        $mensaje .= "¡Gracias por tu compra!";
        
        // Enviar WhatsApp al cliente
        return enviarWhatsApp($comprador['telefono'], $mensaje);
        
    } catch (Exception $e) {
        return [
            'success' => false,
            'message' => 'Error al notificar cliente: ' . $e->getMessage(),
            'response' => null
        ];
    }
}
?>