<?php
// No debe haber NADA antes de <?php

// Desactivamos errores para que no corrompan el PDF
ini_set('display_errors', 0);
error_reporting(0);

// ? CORS y Headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// ? Conexion
require_once(__DIR__ . '/../config.php');
 $mysqli->set_charset("utf8mb4");

// ? Incluir el Autoloader de Composer
require_once(__DIR__ . '/../vendor/autoload.php');

// ? JSON
 $input = json_decode(file_get_contents('php://input'), true);
if (!$input) { exit; }

// --- VALIDACION DE PARAMETROS ---
 $slug_tienda = isset($input['slug_tienda']) ? trim($input['slug_tienda']) : '';
 $factura_id = isset($input['factura_id']) ? (int)$input['factura_id'] : 0;
 $configuracion = isset($input['configuracion']) && is_array($input['configuracion']) ? $input['configuracion'] : [];

if (!$slug_tienda || !$factura_id) { exit; }

function currency_pdf($v) {
    return '$' . number_format($v, 0, ',', '.');
}

try {
    // ... (tus consultas a la BD se mantienen igual) ...
    $stmt_factura = $mysqli->prepare("SELECT f.*, cl.nombre as cliente_nombre, cl.numero_documento as cliente_documento FROM facturas f LEFT JOIN clientes cl ON f.cliente_id = cl.id WHERE f.id = ? AND f.slug_tienda = ?");
    $stmt_factura->bind_param("is", $factura_id, $slug_tienda);
    $stmt_factura->execute();
    $factura = $stmt_factura->get_result()->fetch_assoc();
    $stmt_factura->close();

    if (!$factura) { exit; }

    $stmt_detalles = $mysqli->prepare("SELECT fd.*, a.titulo as articulo_titulo FROM factura_detalles fd LEFT JOIN articulos a ON fd.articulo_id = a.id COLLATE utf8mb4_unicode_ci WHERE fd.factura_id = ?");
    $stmt_detalles->bind_param("i", $factura_id);
    $stmt_detalles->execute();
    $detalles = $stmt_detalles->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt_detalles->close();

    $stmt_pagos = $mysqli->prepare("SELECT medio_pago, monto FROM factura_pagos WHERE factura_id = ?");
    $stmt_pagos->bind_param("i", $factura_id);
    $stmt_pagos->execute();
    $pagos = $stmt_pagos->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt_pagos->close();

    // Generar el PDF
    $pdf = new FPDF('P', 'mm', 'A4');
    $pdf->AddPage();
    $pdf->SetMargins(10, 10, 10);
    $pdf->SetFont('Arial', '', 10);

    // --- ENCABEZADO ---
    if ($configuracion['imprimir_encabezado']) {
        $nombre_tienda = ucwords(str_replace('-', ' ', $slug_tienda));
        $pdf->SetFont('Arial', 'B', 20);
        $pdf->Cell(0, 10, $nombre_tienda, 0, 1, 'C');
        $pdf->SetFont('Arial', 'B', 14);
        $pdf->Cell(0, 8, 'Factura de Venta', 0, 1, 'C');
        $pdf->SetFont('Arial', 'I', 10);
        $pdf->Cell(0, 6, 'N°: ' . $factura['numero_factura'], 0, 1, 'C');
        $pdf->Ln(5);
    }

    // --- INFORMACION CLIENTE Y FACTURA ---
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(0, 6, 'Informacion de la Factura', 0, 1);
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(95, 6, 'Fecha: ' . date('d/m/Y H:i', strtotime($factura['fecha'])), 0, 0);
    $pdf->Cell(95, 6, 'Cliente: ' . mb_convert_encoding($factura['cliente_nombre'], 'ISO-8859-1', 'UTF-8'), 0, 1);
    $pdf->Cell(95, 6, 'Cajero: ' . mb_convert_encoding($factura['cajero'], 'ISO-8859-1', 'UTF-8'), 0, 0);
    $pdf->Cell(95, 6, 'Documento: ' . ($factura['cliente_documento'] ?: 'N/A'), 0, 1);
    $pdf->Ln(5);

    // --- TABLA DE PRODUCTOS ---
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(0, 6, 'Detalle de Productos', 0, 1);
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetFillColor(240, 240, 240);
    $pdf->Cell(100, 8, 'Producto', 1, 0, 'L', true);
    $pdf->Cell(25, 8, 'Cant.', 1, 0, 'C', true);
    $pdf->Cell(30, 8, 'Precio', 1, 0, 'R', true);
    $pdf->Cell(35, 8, 'Subtotal', 1, 1, 'R', true);
    $pdf->SetFont('Arial', '', 10);

    // *** CAMBIO CLAVE: Bucle mejorado para que todas las celdas de la fila tengan la misma altura ***
    foreach ($detalles as $item) {
        $product_name = mb_convert_encoding($item['articulo_titulo'], 'ISO-8859-1', 'UTF-8');
        
        // 1. Guardar la posición Y actual
        $start_y = $pdf->GetY();
        
        // 2. Imprimir el nombre del producto con MultiCell. Esto determinará la altura de la fila.
        $pdf->MultiCell(100, 8, $product_name, 1);
        
        // 3. Obtener la nueva posición Y para saber la altura final de la celda del producto
        $end_y = $pdf->GetY();
        
        // 4. Calcular la altura que usó la celda del producto
        $cell_height = $end_y - $start_y;
        
        // 5. Volver a la posición Y original para dibujar las otras celdas en la misma línea
        $pdf->SetY($start_y);
        
        // 6. Mover el cursor a la derecha de la celda del producto
        $pdf->SetX(110); // 10 (margen) + 100 (ancho celda producto)
        
        // 7. Imprimir las otras celdas usando la altura calculada
        $pdf->Cell(25, $cell_height, $item['cantidad'], 1, 0, 'C');
        $pdf->Cell(30, $cell_height, currency_pdf($item['precio_unitario']), 1, 0, 'R');
        $pdf->Cell(35, $cell_height, currency_pdf($item['subtotal']), 1, 1, 'R');
        
        // El cursor ya está en la posición correcta para la siguiente fila.
    }

    // --- TOTALES ---
    $pdf->Ln(5);
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(155, 7, 'Subtotal:', 0, 0, 'R');
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(35, 7, currency_pdf($factura['subtotal']), 0, 1, 'R');

    if ($factura['descuento'] > 0) {
        $pdf->SetFont('Arial', 'B', 12);
        $pdf->Cell(155, 7, 'Descuento:', 0, 0, 'R');
        $pdf->SetFont('Arial', '', 10);
        $pdf->Cell(35, 7, '-' . currency_pdf($factura['descuento']), 0, 1, 'R');
    }
    if ($factura['iva'] > 0) {
        $pdf->SetFont('Arial', 'B', 12);
        $pdf->Cell(155, 7, 'IVA:', 0, 0, 'R');
        $pdf->SetFont('Arial', '', 10);
        $pdf->Cell(35, 7, currency_pdf($factura['iva']), 0, 1, 'R');
    }
    if ($factura['domicilio'] > 0) {
        $pdf->SetFont('Arial', 'B', 12);
        $pdf->Cell(155, 7, 'Domicilio:', 0, 0, 'R');
        $pdf->SetFont('Arial', '', 10);
        $pdf->Cell(35, 7, currency_pdf($factura['domicilio']), 0, 1, 'R');
    }
    if ($factura['propina'] > 0) {
        $pdf->SetFont('Arial', 'B', 12);
        $pdf->Cell(155, 7, 'Propina:', 0, 0, 'R');
        $pdf->SetFont('Arial', '', 10);
        $pdf->Cell(35, 7, currency_pdf($factura['propina']), 0, 1, 'R');
    }

    $pdf->SetFont('Arial', 'B', 14);
    $pdf->Cell(155, 10, 'TOTAL A PAGAR:', 0, 0, 'R');
    $pdf->Cell(35, 10, currency_pdf($factura['total']), 0, 1, 'R');

    if ($configuracion['imprimir_pie']) {
        $pdf->Ln(10);
        $pdf->SetFont('Arial', 'I', 10);
        $pdf->Cell(0, 6, mb_convert_encoding('Gracias por su compra!', 'ISO-8859-1', 'UTF-8'), 0, 1, 'C');
        $pdf->Cell(0, 6, mb_convert_encoding('Para cualquier duda o consulta, conserve esta factura.', 'ISO-8859-1', 'UTF-8'), 0, 1, 'C');
    }

    // Limpiar el buffer y dejar que FPDF haga todo
    while (ob_get_level()) { ob_end_clean(); }
    
    // FPDF se encarga de las cabeceras y la salida
    $pdf->Output('I', 'factura_' . $factura['numero_factura'] . '.pdf');
    exit;

} catch (Exception $e) {
    header('Content-Type: application/json');
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
}
?>