<?php
// Asegurar que no haya salida antes de los headers
ob_start();

// Configuración de errores
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/debug.log');

header('Content-Type: application/json');

session_start();
require_once 'includes/db.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $db = new Database();
    
    try {
        if (empty($_SESSION['carrito'])) {
            throw new Exception('El carrito está vacío');
        }
        
        // Debug
        error_log("Procesando carrito: " . print_r($_SESSION['carrito'], true));
        
        $total = 0;
        $detallePedido = [];
        
        // Obtener configuración de moneda y decimales
        $configQuery = $db->query("SELECT moneda, con_decimales FROM configuracion")->fetch(PDO::FETCH_ASSOC);
        $moneda = $configQuery['moneda'] ?? '$';
        $mostrarDecimales = $configQuery['con_decimales'] ?? 0;
        $decimales = $mostrarDecimales ? 2 : 0;

        foreach ($_SESSION['carrito'] as $id => $item) {
            $producto = $db->query("SELECT titulo, precio_venta1, oferta FROM productos WHERE id = ?", [$id])->fetch(PDO::FETCH_ASSOC);
            if (!$producto) {
                throw new Exception("Producto no encontrado: $id");
            }
            
            // Determinar precio a usar: oferta si existe, sino precio_venta1
            $precio_unitario = 0;
            if (isset($item['tiene_oferta']) && $item['tiene_oferta'] && isset($item['precio_oferta'])) {
                $precio_unitario = $item['precio_oferta'];
            } else {
                $precio_unitario = $producto['precio_venta1'];
            }
            
            $total += $precio_unitario * $item['cantidad'];
            $subtotal = $precio_unitario * $item['cantidad'];
            
            // Formatear precio con la configuración correcta
            $precioFormateado = number_format($precio_unitario, $decimales, '.', ',');
            $subtotalFormateado = number_format($subtotal, $decimales, '.', ',');
            
            // Agregar indicador de oferta en el detalle
            $indicadorOferta = (isset($item['tiene_oferta']) && $item['tiene_oferta']) ? "🔥 " : "";
            $detallePedido[] = "{$indicadorOferta}{$producto['titulo']} x {$item['cantidad']} ({$moneda} {$precioFormateado} c/u) = {$moneda} {$subtotalFormateado}";
        }

        // Generar token único
        $token = bin2hex(random_bytes(16));
        
        // Debug
        error_log("Total calculado: $total");
        error_log("Detalles: " . print_r($detallePedido, true));
        
        // Insertar pedido
        $stmt = $db->query(
            "INSERT INTO pedidos (total, fecha, token, estado) VALUES (?, NOW(), ?, 'pendiente')",
            [$total, $token]
        );
        
        if (!$stmt) {
            throw new Exception('Error al crear el pedido');
        }
        
        $pedidoId = $db->query("SELECT LAST_INSERT_ID() as id")->fetch(PDO::FETCH_ASSOC)['id'];
        
        // Debug para verificar el ID del pedido
        error_log("Pedido creado con ID: " . $pedidoId);
        
        // Insertar detalles del pedido
        foreach ($_SESSION['carrito'] as $id => $item) {
            $producto = $db->query("SELECT titulo, precio_venta1, oferta FROM productos WHERE id = ?", [$id])->fetch(PDO::FETCH_ASSOC);
            if (!$producto) {
                throw new Exception("Producto no encontrado al insertar detalle: $id");
            }
            
            // Determinar precio a usar: oferta si existe, sino precio_venta1
            $precio_unitario = 0;
            if (isset($item['tiene_oferta']) && $item['tiene_oferta'] && isset($item['precio_oferta'])) {
                $precio_unitario = $item['precio_oferta'];
            } else {
                $precio_unitario = $producto['precio_venta1'];
            }
            
            $subtotal = $precio_unitario * $item['cantidad'];
            
            // Debug para verificar los valores a insertar
            error_log("Insertando detalle: pedido_id=$pedidoId, producto_id=$id, cantidad={$item['cantidad']}, precio=$precio_unitario, subtotal=$subtotal, tiene_oferta=" . (isset($item['tiene_oferta']) ? 'true' : 'false'));
            
            $stmtDetalle = $db->query(
                "INSERT INTO pedidos_detalle (id_pedido, id_producto, cantidad, precio_unitario, subtotal) 
                VALUES (?, ?, ?, ?, ?)",
                [
                    $pedidoId,
                    $id,
                    $item['cantidad'],
                    $precio_unitario,
                    $subtotal
                ]
            );
            
            if (!$stmtDetalle) {
                // Si falla la inserción del detalle, revertimos todo
                $db->query("DELETE FROM pedidos WHERE id = ?", [$pedidoId]);
                throw new Exception("Error al insertar detalle del pedido para producto $id");
            }
        }
        
        // Generar enlace de administración
        // Detectar protocolo (http o https) considerando posibles proxies
        $protocol = 'http';
        if (
            (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
            (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
        ) {
            $protocol = 'https';
        }

        $host = $_SERVER['HTTP_HOST'];

        // Detectar el directorio base dinámicamente
        $script_dir = dirname($_SERVER['SCRIPT_NAME']);
        $basePath = $script_dir;
        
        // Asegurarse de que termine con /
        if (substr($basePath, -1) !== '/') {
            $basePath .= '/';
        }

        // Generar enlace
        $adminUrl = "{$protocol}://{$host}{$basePath}admin_pedido.php?token=" . $token;

        
        // Preparar mensaje de WhatsApp
        $mensaje = "";
        $mensaje .= "🛍️ *Nuevo Pedido #{$pedidoId}*\n\n";
        $mensaje .= "*Detalle:*\n";
        foreach ($detallePedido as $linea) {
            $mensaje .= "• {$linea}\n";
        }
        $mensaje .= "\n*Total:* {$moneda} " . number_format($total, $decimales, '.', ',') . "\n\n";
        $mensaje .= "*Link para procesar pedido:*\n";
        $mensaje .= $adminUrl;

        // Debug del mensaje
        error_log("Token generado: " . $token);
        error_log("URL Admin: " . $adminUrl);
        error_log("Mensaje WhatsApp: " . $mensaje);
        
        $response = [
            'success' => true,
            'pedido_id' => $pedidoId,
            'whatsapp_message' => $mensaje,
            'admin_url' => $adminUrl
        ];
        
        echo json_encode($response);
        
    } catch (Exception $e) {
        error_log("Error en guardar_pedido.php: " . $e->getMessage());
        error_log("Stack trace: " . $e->getTraceAsString());
        
        echo json_encode([
            'success' => false,
            'error' => $e->getMessage()
        ]);
    }
} else {
    echo json_encode([
        'success' => false,
        'error' => 'Método no permitido'
    ]);
}

// Asegurar que no haya más salida
ob_end_flush();
exit;