<?php
session_start();
require_once 'includes/db.php';
require_once 'includes/theme_only.php'; 
//require_once 'includes/header.php';


// Verificar si el usuario está logueado
if (!isset($_SESSION['usuario_id'])) {
    header('Location: login.php');
    exit;
}

// Verificar si hay un ID de venta
if (!isset($_GET['venta_id']) || empty($_GET['venta_id'])) {
    header('Location: index.php');
    exit;
}

$venta_id = intval($_GET['venta_id']);
$db = new Database();
$pdo = $db->getPDO();

// Verificar que la venta existe y pertenece al vendedor actual
$stmt = $pdo->prepare("
    SELECT COUNT(*) 
    FROM venta_items 
    WHERE id = ? 
    AND vendedor_id = ? 
    AND estado = 'EN_CURSO'
");
$stmt->execute([$venta_id, $_SESSION['usuario_id']]);
$existe_venta = $stmt->fetchColumn();

if (!$existe_venta) {
    // Si la venta no existe o no pertenece al vendedor, redirigir al index
    header('Location: index.php');
    exit;
}

// Modificar la consulta de configuración para incluir favicon y factura_tipo
$stmt = $pdo->prepare("SELECT moneda, con_decimales, color_principal, color_secundario, favicon, factura_tipo FROM configuracion LIMIT 1");
$stmt->execute();
$config = $stmt->fetch(PDO::FETCH_ASSOC);

// Si no hay configuración, usar valores por defecto
if (!$config) {
    $config = array(
        'moneda' => 'Gs.',
        'con_decimales' => 0,
        'color_principal' => '#0d6efd',
        'color_secundario' => '#6c757d',
        'favicon' => 'favicon.ico'
    );
}


// Modificar la consulta principal para obtener todos los items de ventas en curso
$stmt = $pdo->prepare("
    SELECT 
        vi.*,
        p.titulo,
        p.codigo,
        c.nombre as cliente_nombre,
        c.apellidos as cliente_apellidos,
        c.razon_social,
        c.id_cliente,
        vi.monto_primera_cuota,
        vi.primera_cuota,
        vi.venta_id
    FROM venta_items vi
    JOIN productos p ON p.id = vi.producto_id
    JOIN clientes c ON c.id_cliente = vi.cliente_id
    WHERE vi.vendedor_id = ? 
    AND vi.estado = 'EN_CURSO'
    AND vi.cliente_id = (
        SELECT cliente_id 
        FROM venta_items 
        WHERE id = ?
    )
    ORDER BY vi.id DESC
");

$stmt->execute([$_SESSION['usuario_id'], $venta_id]);
$items = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Si no hay items, redirigir al index
if (empty($items)) {
    header('Location: index.php');
    exit;
}

// Usar el primer item para obtener la información del cliente y la venta
$venta_actual = $items[0];

// Modificar el cálculo de totales y asignar monto_primera_cuota a cada ítem
$total_contado = 0;
$total_credito = 0;
$total_primera_cuota = 0;
$items_con_cuotas = [];

foreach ($items as &$item) {  // Note el & para modificar el ítem original
    if ($item['tipo_pago'] === 'contado' || $item['tipo_pago'] === 'efectivo') {
        $total_contado += $item['subtotal'];
    } else if ($item['tipo_pago'] === 'credito') {
        $total_credito += $item['subtotal'];
        if ($item['primera_cuota'] == 1) {
            $item['monto_primera_cuota'] = $item['subtotal'] / $item['cantidad_cuotas'];
            $total_primera_cuota += $item['monto_primera_cuota'];
            $items_con_cuotas[] = [
                'id' => $item['id'],
                'monto_primera_cuota' => $item['monto_primera_cuota']
            ];
        }
    }
}

// Ajustar el total de crédito restando las primeras cuotas
$total_credito_final = $total_credito - $total_primera_cuota;

// Calcular el total a pagar ahora (contado + primeras cuotas)
$total_pagar_ahora = $total_contado + $total_primera_cuota;

// Invertir el orden del array de items para mostrarlos correctamente
$items = array_reverse($items);
echo getThemeCSS();

?>
<!DOCTYPE html>
<html lang="es">
<head>

    <?php
    // Modo oscuro
    require_once 'includes/dark_mode.php';
    ?>
    <meta name="color-scheme" content="light dark">
    <?php echo getDarkModeStyles(); ?>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Venta en Curso</title>
    <link rel="shortcut icon" href="uploads/config/<?php echo htmlspecialchars($config['favicon']); ?>">
    <link rel="stylesheet" href="admin/css/bootstrap.min.css">
    <style>
        :root {
            --color-primary: <?php echo $config['color_principal']; ?>;
            --color-secondary: <?php echo $config['color_secundario']; ?>;
        }
        .btn-primary {
            background-color: var(--color-primary) !important;
            border-color: var(--color-primary) !important;
        }
        .btn-secondary {
            background-color: var(--color-secondary) !important;
            border-color: var(--color-secondary) !important;
        }
        .btn-danger {
            background-color: #dc3545 !important;
            border-color: #dc3545 !important;
        }
        .info-venta {
            border-left: 4px solid var(--color-primary);
        }
        .titulo-principal {
            color: var(--color-primary);
            font-weight: bold;
        }
        .btn img {
            filter: brightness(0) invert(1);
        }

        /* Agregar estilos para el input group */
        .input-group-text {
            background-color: var(--color-primary);
            border-color: var(--color-primary);
            color: white;
        }

        .form-control:focus {
            border-color: var(--color-primary);
            box-shadow: 0 0 0 0.2rem rgba(var(--color-primary-rgb), 0.25);
        }

        /* Estilo para el título de productos */
        .titulo-productos {
            color: var(--color-primary);
            font-weight: bold;
        }

        /* Estilo para el encabezado de la tabla */
        .thead-primary {
            background-color: var(--color-primary);
            color: white;
        }
        
        .thead-primary th {
            padding: 0.5rem !important; /* Reducir el padding vertical */
        }

        /* Estilos para los totales */
        .table tfoot td {
            white-space: nowrap;
            padding: 0.5rem !important;
            height: 40px !important;
        }
        
        .table tfoot .total-label {
            text-align: right !important;
            padding-right: 1rem !important;
            white-space: nowrap !important;
            width: 1% !important;
        }
        
        .table tfoot .total-amount {
            text-align: right !important;
            padding-right: 1rem !important;
            font-weight: bold !important;
            white-space: nowrap !important;
            width: 1% !important;
        }

        /* Estilos para la columna de producto */
        .table th:nth-child(2), 
        .table td:nth-child(2) {
            width: 125%;
            min-width: 200px;
        }

        .producto-meta {
            display: flex;
            justify-content: space-between;
            font-size: 0.9rem;
            margin-bottom: 0.5rem;
            opacity: 0.9;
        }
        
        .operador-cliente {
            display: flex;
            gap: 1.5rem;
            align-items: center;
        }

        @media (max-width: 576px) {
            .operador-cliente {
                flex-direction: column;
                align-items: flex-start;
                gap: 0.25rem;
            }
        }

        /* Estilo para el checkbox de unificar cuotas */
        .form-check {
            margin-bottom: 0;
        }

        @media (max-width: 576px) {
            .d-flex.justify-content-between {
                flex-direction: column;
                align-items: flex-start !important;
                gap: 0.5rem;
            }
            
            .titulo-productos {
                margin-bottom: 0.5rem !important;
            }
        }
    </style>
    
</head>
<body>
    <div class="container mt-4">
        <h2 class="mb-4 titulo-principal">
            <img src="admin/icons/cart-check.svg" class="me-2" width="24" height="24" alt="">
            Venta en Curso
        </h2>
        <div class="info-venta card p-3 mb-4">
            <?php
            // Depuración - agregar antes de mostrar la información
            echo "<!-- Debug: ";
            echo "con_entrega: " . (isset($venta_actual['con_entrega']) ? $venta_actual['con_entrega'] : 'no definido') . ", ";
            echo "monto_entrega: " . (isset($venta_actual['monto_entrega']) ? $venta_actual['monto_entrega'] : 'no definido');
            echo " -->";
            ?>
            <p>
                <img src="admin/icons/person.svg" class="me-2" width="16" height="16" alt="">
                <strong>Cliente:</strong> <?php echo htmlspecialchars($venta_actual['cliente_nombre'] . ' ' . $venta_actual['cliente_apellidos']); ?>
            </p>
            <p>
                <img src="admin/icons/cash.svg" class="me-2" width="16" height="16" alt="">
                <strong>Total Contado:</strong> <?php echo $config['moneda']; ?> <?php echo number_format($total_contado, $config['con_decimales'], ',', '.'); ?>
            </p>
            <?php if (isset($venta_actual['primera_cuota']) && $venta_actual['primera_cuota'] == 1): ?>
                <p class="text-success">
                    <img src="admin/icons/cash.svg" class="me-2" width="16" height="16" alt="">
                    <strong>Total Entrega (Primera Cuota):</strong> 
                    <?php echo $config['moneda']; ?> 
                    <?php echo number_format($total_primera_cuota, $config['con_decimales'], ',', '.'); ?>
                </p>
            <?php endif; ?>
            <p>
                <img src="admin/icons/credit-card.svg" class="me-2" width="16" height="16" alt="">
                <strong>Total Crédito:</strong> <?php echo $config['moneda']; ?> <?php 
                echo number_format($total_credito_final, $config['con_decimales'], ',', '.'); 
                ?>
            </p>
        </div>
        
        <!-- Agregar tabla de productos después de la info-venta -->
        <div class="productos-venta card p-3 mb-4">
            <div class="d-flex justify-content-between align-items-center mb-3">
                <h4 class="titulo-productos mb-0">Productos en esta venta</h4>
                <!-- Cuotas siempre unificadas -->
                <input type="hidden" id="unificar_cuotas" name="unificar_cuotas" value="1">
            </div>
            <div class="table-responsive">
                <table class="table table-hover">
                    <thead class="thead-primary">
                        <tr>
                            <th>Código</th>
                            <th>Producto</th>
                            <th>Cantidad</th>
                            <th class="text-right">Precio/U.</th>
                            <th>Tipo</th>
                            <th class="text-right">Subtotal</th>
                            <th>Acciones</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php 
                        // Iterar sobre los items en el orden correcto
                        foreach ($items as $item): 
                        ?>
                        <tr id="fila-<?php echo $item['id']; ?>">
                            <td><?php echo htmlspecialchars($item['codigo']); ?></td>
                            <td><?php echo htmlspecialchars($item['titulo']); ?></td>
                            <td><?php echo number_format($item['cantidad'], 0, ',', '.'); ?></td>
                            <td class="text-right">
                                <?php echo $config['moneda'] . ' ' . 
                                    number_format($item['precio_unitario'], $config['con_decimales'], ',', '.'); ?>
                            </td>
                            <td>
                                <?php if ($item['tipo_pago'] === 'contado' || $item['tipo_pago'] === 'efectivo'): ?>
                                    <span class="badge badge-success">Contado</span>
                                <?php else: ?>
                                    <span class="badge badge-info">
                                        <?php 
                                        // Verificar si es semanal por el prefijo en grupo_id
                                        $esSemanal = strpos($item['grupo_id'], 'venta_sem_') === 0;
                                        echo $item['cantidad_cuotas'] . ' cuotas ' . 
                                             ($esSemanal ? 'semanales' : 'mensuales');
                                        ?>
                                    </span>
                                <?php endif; ?>
                            </td>
                            <td class="text-right">
                                <?php echo $config['moneda'] . ' ' . 
                                    number_format($item['subtotal'], $config['con_decimales'], ',', '.'); ?>
                            </td>
                            <td>
                                <button class="btn btn-danger btn-sm eliminar-producto" 
                                        data-id="<?php echo $item['id']; ?>"
                                        data-venta="<?php echo $venta_id; ?>">
                                    <img src="admin/icons/trash.svg" width="16" height="16" alt="Eliminar">
                                </button>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                    <tfoot>
                        <tr class="font-weight-bold">
                            <td colspan="5" class="total-label">Total Contado:</td>
                            <td class="total-amount">
                                <?php echo $config['moneda'] . ' ' . number_format($total_contado, $config['con_decimales'], ',', '.'); ?>
                            </td>
                            <td></td>
                        </tr>
                        <?php if ($total_primera_cuota > 0): ?>
                        <tr class="font-weight-bold text-success">
                            <td colspan="5" class="total-label">Total Primeras Cuotas:</td>
                            <td class="total-amount">
                                <?php echo $config['moneda'] . ' ' . number_format($total_primera_cuota, $config['con_decimales'], ',', '.'); ?>
                            </td>
                            <td></td>
                        </tr>
                        <tr class="font-weight-bold bg-light">
                            <td colspan="5" class="total-label">Total a Pagar Ahora:</td>
                            <td class="total-amount">
                                <?php echo $config['moneda'] . ' ' . number_format($total_pagar_ahora, $config['con_decimales'], ',', '.'); ?>
                            </td>
                            <td></td>
                        </tr>
                        <?php endif; ?>
                        <tr class="font-weight-bold">
                            <td colspan="5" class="total-label">Total Crédito Restante:</td>
                            <td class="total-amount">
                                <?php echo $config['moneda'] . ' ' . number_format($total_credito_final, $config['con_decimales'], ',', '.'); ?>
                            </td>
                            <td></td>
                        </tr>
                    </tfoot>
                </table>
            </div>
        </div>

        <div class="botones-accion mt-4">
            <?php if ($venta_actual['estado'] === 'EN_CURSO'): ?>
                <div class="row justify-content-center">
                    <!-- Botón Seguir Agregando -->
                    <div class="col-12 col-md-3 mb-3">
                        <form action="index.php" method="post">
                            <input type="hidden" name="venta_actual_id" value="<?php echo htmlspecialchars($venta_id); ?>">
                            <input type="hidden" name="cliente_id" value="<?php echo htmlspecialchars($venta_actual['id_cliente']); ?>">
                            <input type="hidden" name="seguir_vendiendo" value="1">
                            <button type="submit" class="btn btn-secondary w-100">
                                <img src="admin/icons/cart-plus.svg" alt="" class="me-2" width="16" height="16">
                                Seguir Agregando
                            </button>
                        </form>
                    </div>

                    <!-- Monto de Entrega y Confirmar Venta -->
                    <div class="col-12 col-md-3 mb-3">
                        <form action="finalizar_venta.php" method="post" id="formFinalizarVenta">
                            <input type="hidden" name="venta_id" value="<?php echo htmlspecialchars($venta_id); ?>">
                            <input type="hidden" name="vendedor_id" value="<?php echo htmlspecialchars($_SESSION['usuario_id']); ?>">
                            <input type="hidden" name="cliente_id" value="<?php echo htmlspecialchars($venta_actual['id_cliente']); ?>">
                            <?php $_SESSION['cliente_temp_id'] = $venta_actual['id_cliente']; ?>

                            <div class="form-group mb-3">
                                <?php if ($total_credito_final > 0): ?>
                                <div class="input-group mb-2">
                                    <span class="input-group-text"><?php echo htmlspecialchars($config['moneda']); ?></span>
                                    <input type="text" 
                                           id="entrega_inicial" 
                                           name="entrega_inicial"
                                           class="form-control" 
                                           placeholder="Entrega Inicial (opcional)"
                                           pattern="\d*\.?\d*">
                                </div>
                                <!-- Campo para fecha de vencimiento de la segunda cuota -->
                                <div class="input-group mb-2">
                                    <span class="input-group-text"><img src="admin/icons/calendar.svg" width="16" height="16" alt="Fecha"></span>
                                    <input type="date" 
                                           id="fecha_segunda_cuota" 
                                           name="fecha_segunda_cuota"
                                           class="form-control" 
                                           required
                                           min="<?php echo date('Y-m-d'); ?>">
                                </div>
                                <?php else: ?>
                                <input type="hidden" 
                                       id="entrega_inicial" 
                                       name="entrega_inicial"
                                       value="0">
                                <?php endif; ?>
                                <?php if ($total_contado > 0): ?>
                                <div class="input-group">
                                    <span class="input-group-text"><?php echo htmlspecialchars($config['moneda']); ?></span>
                                    <input type="text" 
                                           id="monto_recibido" 
                                           name="monto_recibido"
                                           class="form-control" 
                                           required
                                           placeholder="Ingrese el monto recibido"
                                           pattern="\d*\.?\d*">
                                </div>
                                <?php else: ?>
                                <input type="hidden" 
                                       id="monto_recibido" 
                                       name="monto_recibido"
                                       value="0">
                                <?php endif; ?>
                                <div id="mensaje_calculo" class="alert mt-2" style="display: none;"></div>
                            </div>

                            <button type="submit" class="btn btn-primary w-100">
                                <img src="admin/icons/check.svg" alt="" class="me-2" width="16" height="16">
                                Confirmar Venta
                            </button>
                        </form>
                    </div>

                    <!-- Botón Imprimir -->
                    <?php if (isset($config['factura_tipo']) && intval($config['factura_tipo']) === 1): ?>
                    <div class="col-12 col-md-3 mb-3">
                        <button type="button" class="btn btn-secondary w-100" 
                                onclick="mostrarFormularioRemision(<?php echo htmlspecialchars($venta_actual['venta_id']); ?>)">
                            <img src="admin/icons/file-text.svg" alt="" class="me-2" width="16" height="16">
                            Nota de Remisión
                        </button>
                    </div>
                    <?php endif; ?>

                    <!-- Botón Cancelar -->
                    <div class="col-12 col-md-3 mb-3">
                        <button type="button" class="btn btn-danger w-100" onclick="window.confirmarCancelacion()">
                            <img src="admin/icons/x-circle.svg" alt="" class="me-2" width="16" height="16">
                            Cancelar Venta
                        </button>
                    </div>
                </div>
            <?php endif; ?>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <script>
        // Definir la función globalmente
        window.confirmarCancelacion = function() {
            if (typeof Swal === 'undefined') {
                alert('Error: No se pudo cargar el componente de alertas');
                return;
            }
            
            Swal.fire({
                title: '¿Está seguro?',
                text: "Se eliminarán todos los productos registrados para esta venta",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '<?php echo $config['color_principal']; ?>',
                cancelButtonColor: '#d33',
                confirmButtonText: 'Sí, cancelar todo',
                cancelButtonText: 'No, mantener'
            }).then((result) => {
                if (result.isConfirmed) {
                    const ventaId = '<?php echo $venta_id; ?>';
                    window.location.href = 'cancelar_venta.php?venta_id=' + ventaId;
                }
            });
        };

        // Esperar a que todo esté cargado
        $(document).ready(function() {
                // Establecer fecha por defecto para la segunda cuota (30 días desde hoy)
                $(document).ready(function() {
                    const fechaPorDefecto = new Date();
                    fechaPorDefecto.setDate(fechaPorDefecto.getDate() + 30);
                    $('#fecha_segunda_cuota').val(fechaPorDefecto.toISOString().split('T')[0]);
                });

                $('#formFinalizarVenta').on('submit', function(e) {
                    e.preventDefault();
                    
                    const montoMinimo = <?php echo $total_contado + $total_primera_cuota; ?>;
                    // Convertir y redondear a 2 decimales para comparación precisa
                    const montoRecibido = Math.round(parseFloat($('#monto_recibido').val().replace(/\./g, '').replace(',', '.')) * 100) / 100 || 0;
                    const unificarCuotas = true; // Siempre unificar cuotas
                    const tieneContado = <?php echo $total_contado > 0 ? 'true' : 'false'; ?>;
                    
                    // Validar que se haya seleccionado una fecha para la segunda cuota si hay crédito
                    if (<?php echo $total_credito_final ?> > 0 && !$('#fecha_segunda_cuota').val()) {
                        Swal.fire({
                            icon: 'error',
                            title: 'Fecha requerida',
                            text: 'Por favor, seleccione la fecha de vencimiento para la segunda cuota'
                        });
                        return;
                    }

                    // Solo validar el monto mínimo si hay venta al contado
                    if (tieneContado && montoRecibido + 0.01 < montoMinimo) {
                        Swal.fire({
                            icon: 'error',
                            title: 'Monto insuficiente',
                            text: `El monto recibido debe ser al menos ${montoMinimo.toLocaleString('es-PY')} ${<?php echo json_encode($config['moneda']); ?>}`
                        });
                        return;
                    }                // Crear objeto con los items y sus montos de primera cuota
                const itemsCuotas = <?php echo json_encode($items); ?>;
                const fechaActual = new Date();

                // Preparar array de cuotas para cada item a crédito
                let cuotasItems = [];
                let totalGeneral = 0; // Definir la variable fuera del bloque condicional

                if (unificarCuotas) {
                    // Calcular el total general y usar las cuotas del último item
                    totalGeneral = 0; // Reiniciar por si acaso
                    let ultimoItemCredito = null;
                    let todosItemsCredito = [];
                    const entregaInicial = parseFloat($('#entrega_inicial').val().replace(/\./g, '').replace(',', '.')) || 0;

                    // Encontrar el último item a crédito
                    itemsCuotas.forEach(item => {
                        if (item.tipo_pago === 'credito') {
                            ultimoItemCredito = item;
                        }
                    });

                    if (ultimoItemCredito) {
                        // Determinar si es semanal por el prefijo en grupo_id
                        const esSemanal = ultimoItemCredito.grupo_id && ultimoItemCredito.grupo_id.includes('venta_sem_');
                        // Calcular la cantidad de cuotas reales (para pago) vs. para cálculos de días
                        const cantidadCuotas = esSemanal ? ultimoItemCredito.cantidad_cuotas * 4 : ultimoItemCredito.cantidad_cuotas;
                        
                        // Obtener el total original y la entrega inicial
                        const totalOriginal = <?php echo $total_credito_final; ?>;
                        const entregaInicial = parseFloat($('#entrega_inicial').val().replace(/\./g, '').replace(',', '.')) || 0;
                        
                        // Calcular el total a financiar después de la entrega inicial
                        const totalAFinanciar = totalOriginal - entregaInicial;
                        
                        // Dividir el total a financiar entre la cantidad de cuotas
                        const montoCuotaUnificado = Math.floor(totalAFinanciar / cantidadCuotas);
                        
                        // La última cuota ajustada para que sume exactamente el total
                        const ajusteUltimaCuota = totalAFinanciar - (montoCuotaUnificado * (cantidadCuotas - 1));
                        const diasEntreCuotas = esSemanal ? 7.5 : 30; // 7.5 días por semana

                        // Calcular días totales de crédito (usando la cantidad original para semanales)
                        const diasTotalesCredito = Math.round(diasEntreCuotas * (esSemanal ? ultimoItemCredito.cantidad_cuotas : cantidadCuotas));
                        
                        const cuotasUnificadas = [];
                        // Si hay entrega inicial, crear la primera cuota con esa entrega
                        if (entregaInicial > 0) {
                            cuotasUnificadas.push({
                                numero_cuota: 1,
                                monto: entregaInicial,
                                fecha_vencimiento: fechaActual.toISOString().split('T')[0],
                                fecha_pago: fechaActual.toISOString().slice(0, 19).replace('T', ' '),
                                estado: 'PAGADO',
                                tipo_cuota: esSemanal ? 'SEMANAL' : 'MENSUAL'
                            });
                        }

                        // Obtener la fecha seleccionada para la segunda cuota
                        const fechaSegundaCuotaStr = $('#fecha_segunda_cuota').val();
                        const fechaBaseSegundaCuota = new Date(fechaSegundaCuotaStr + 'T00:00:00');

                        // Generar el resto de las cuotas empezando desde 2 si hay entrega inicial
                        for (let i = entregaInicial > 0 ? 2 : 1; i <= cantidadCuotas; i++) {
                            let fechaVencimiento;
                            if (i === 2) {
                                // Para la segunda cuota, usar exactamente la fecha seleccionada
                                fechaVencimiento = new Date(fechaBaseSegundaCuota);
                            } else if (i > 2) {
                                // Para las cuotas posteriores, sumar 30 días a partir de la fecha de la segunda cuota
                                fechaVencimiento = new Date(fechaBaseSegundaCuota);
                                const diasAdicionales = 30 * (i - 2);
                                fechaVencimiento.setDate(fechaVencimiento.getDate() + diasAdicionales);
                            } else {
                                // Para la primera cuota (si hay entrega inicial)
                                fechaVencimiento = new Date(fechaActual);
                            }
                            
                            const fechaVencimientoFormatted = fechaVencimiento.toISOString().split('T')[0];
                            const estado = 'PENDIENTE';
                            const fechaPago = null;
                            
                            // Para la última cuota, usar el monto ajustado
                            const montoCuota = i === cantidadCuotas ? ajusteUltimaCuota : montoCuotaUnificado;
                            
                            cuotasUnificadas.push({
                                numero_cuota: i,
                                monto: montoCuota,
                                fecha_vencimiento: fechaVencimientoFormatted,
                                fecha_pago: fechaPago,
                                estado: estado,
                                tipo_cuota: esSemanal ? 'SEMANAL' : 'MENSUAL'
                            });
                        }

                        cuotasItems = [{
                            item_id: 'unificado',
                            cuotas: cuotasUnificadas,
                            es_semanal: esSemanal,
                            cantidad_cuotas: esSemanal ? ultimoItemCredito.cantidad_cuotas : cantidadCuotas, // Si es semanal, usar la cantidad original de cuotas
                            monto_total: totalGeneral,
                            dias_credito: diasTotalesCredito
                        }];
                    }
                } else {
                    // Mantener la lógica original de cuotas separadas
                    cuotasItems = itemsCuotas.map(item => {
                        if (item.tipo_pago === 'credito') {
                            // Asegurarse de que los valores numéricos sean números
                            const subtotal = parseFloat(item.subtotal) || 0;
                            // No calcular descuento de entrega inicial aquí, se manejará en el backend
                            const subtotalAjustado = subtotal;
                            
                            const cuotas = [];
                        // Determinar si es semanal por el prefijo en grupo_id
                        const esSemanal = item.grupo_id && item.grupo_id.includes('venta_sem_');
                        // Calcular cantidad real de cuotas si es semanal
                        const cantidadCuotas = esSemanal ? item.cantidad_cuotas * 4 : item.cantidad_cuotas;
                        // Obtener el valor de la entrega inicial
                        const entregaInicial = parseFloat($('#entrega_inicial').val().replace(/\./g, '').replace(',', '.')) || 0;
                        // Ajustar el monto de cuota según la cantidad real de cuotas y la entrega inicial
                        const montoRestante = entregaInicial > 0 ? subtotalAjustado - entregaInicial : subtotalAjustado;
                        const montoCuota = montoRestante / (cantidadCuotas - 1); // Se resta 1 porque la primera cuota es la entrega
                        const diasEntreCuotas = esSemanal ? 7.5 : 30; // 7.5 días por semana
                        // Calcular días totales de crédito
                        const diasTotalesCredito = Math.round(diasEntreCuotas * (esSemanal ? item.cantidad_cuotas : item.cantidad_cuotas));                            // Si hay entrega inicial, crear la primera cuota con esa entrega
                            if (entregaInicial > 0) {
                                cuotas.push({
                                    numero_cuota: 1,
                                    monto: entregaInicial,
                                    fecha_vencimiento: fechaActual.toISOString().split('T')[0],
                                    fecha_pago: fechaActual.toISOString().slice(0, 19).replace('T', ' '),
                                    estado: 'PAGADO',
                                    tipo_cuota: esSemanal ? 'SEMANAL' : 'MENSUAL'
                                });
                            }

                        // Generar el resto de las cuotas empezando desde 2 si hay entrega inicial
                        // Obtener la fecha seleccionada para la segunda cuota
                        const fechaSegundaCuota = new Date($('#fecha_segunda_cuota').val());

                        for (let i = entregaInicial > 0 ? 2 : 1; i <= cantidadCuotas; i++) {
                            let fechaVencimiento;
                            
                            if (i === 1) {
                                // Primera cuota (si no hay entrega inicial)
                                fechaVencimiento = new Date(fechaActual);
                            } else if (i === 2) {
                                // Segunda cuota - usar la fecha seleccionada
                                fechaVencimiento = new Date(fechaSegundaCuota);
                            } else {
                                // Cuotas posteriores - sumar 30 días a partir de la fecha de la segunda cuota
                                fechaVencimiento = new Date(fechaSegundaCuota);
                                fechaVencimiento.setDate(fechaVencimiento.getDate() + (30 * (i - 2)));
                            }
                            
                            const fechaVencimientoFormatted = fechaVencimiento.toISOString().split('T')[0];                                // Las cuotas posteriores siempre son pendientes
                                const estado = 'PENDIENTE';
                                const fechaPago = null;
                                
                                // Todas las cuotas después de la entrega tienen el mismo monto
                                const montoCuotaActual = montoCuota;
                                
                                cuotas.push({
                                    numero_cuota: i,
                                    monto: montoCuotaActual,
                                    fecha_vencimiento: fechaVencimientoFormatted,
                                    fecha_pago: fechaPago,
                                    estado: estado,
                                    tipo_cuota: esSemanal ? 'SEMANAL' : 'MENSUAL'
                                });
                            }
                            return {
                                item_id: item.id,
                                cuotas: cuotas,
                                es_semanal: esSemanal,
                                cantidad_cuotas: esSemanal ? item.cantidad_cuotas : cantidadCuotas, // Si es semanal, usar la cantidad original de cuotas
                                dias_credito: diasTotalesCredito
                            };
                        }
                        return null;
                    }).filter(item => item !== null);
                }

                // Obtener el valor de la entrega inicial
                const entregaInicial = parseFloat($('#entrega_inicial').val().replace(/\./g, '').replace(',', '.')) || 0;
                
                // Usamos el total de crédito original sin ajustar
                const totalCreditoAjustado = <?php echo $total_credito; ?>;

                // Obtener la fecha de la segunda cuota
                const fechaSegundaCuota = $('#fecha_segunda_cuota').val();

                $.ajax({
                    url: 'finalizar_venta.php',
                    method: 'POST',
                    data: {
                        venta_id: '<?php echo $venta_id; ?>',
                        vendedor_id: <?php echo $_SESSION['usuario_id']; ?>,
                        cliente_id: <?php echo $venta_actual['cliente_id']; ?>,
                        monto_recibido: montoRecibido,
                        entrega_inicial: entregaInicial,
                        total_credito: totalCreditoAjustado,
                        total_contado: <?php echo $total_contado; ?>,
                        total_primera_cuota: <?php echo $total_primera_cuota; ?>,
                        items_cuotas: JSON.stringify(itemsCuotas),
                        grupo_id: '<?php echo isset($venta_actual['grupo_id']) ? $venta_actual['grupo_id'] : ''; ?>',
                        cuotas_items: JSON.stringify(cuotasItems),
                        unificar_cuotas: unificarCuotas ? 1 : 0,
                        fecha_segunda_cuota: fechaSegundaCuota // Agregar la fecha de la segunda cuota
                    },
                    dataType: 'json', // Especificar que esperamos JSON
                    beforeSend: function() {
                        // Mostrar indicador de carga
                        Swal.fire({
                            title: 'Procesando...',
                            text: 'Estamos procesando su venta',
                            allowOutsideClick: false,
                            didOpen: () => {
                                Swal.showLoading();
                            }
                        });
                    },
                    success: function(response) {
                        console.log('Respuesta del servidor:', response); // Debug
                        
                        if (response.success) {
                            // Primero mostrar el mensaje de éxito
                            Swal.fire({
                                icon: 'success',
                                title: '¡Venta finalizada!',
                                text: 'La venta se ha procesado correctamente',
                                timer: 2000,
                                showConfirmButton: false
                            }).then(() => {
                                // Luego abrir la ventana de impresión y redirigir
                                // Usar el venta_id que viene de la tabla venta_items, no el id
                                window.open('imprimir_boleta.php?venta_id=<?php echo $venta_actual['venta_id']; ?>', '_blank');
                                window.location.href = 'index.php';
                            });
                        } else {
                            Swal.fire({
                                icon: 'error',
                                title: 'Error',
                                text: response.message || 'Error al finalizar la venta'
                            });
                        }
                    },
                    error: function(xhr, status, error) {
                        let errorMessage = 'Hubo un problema al procesar la venta.';
                        try {
                            const response = JSON.parse(xhr.responseText);
                            errorMessage = response.message || errorMessage;
                        } catch(e) {
                            if (xhr.responseText) {
                                errorMessage = 'Error en el servidor: ' + xhr.responseText.substring(0, 300);
                                if (xhr.responseText.length > 300) {
                                    errorMessage += '...';
                                }
                            }
                        }
                        
                        Swal.fire({
                            icon: 'error',
                            title: 'Error en la solicitud',
                            text: errorMessage,
                            footer: '<a href="#" onclick="console.log(\'Error completo:\', `' + 
                                    (xhr.responseText ? xhr.responseText.replace(/`/g, '\\`') : '') + 
                                    '`); return false;">Ver error completo en consola</a>'
                        });
                    }
                });
            });

            // Calcular vuelto o faltante
            function actualizarCalculos() {
                const montoRecibido = Math.round(parseFloat($('#monto_recibido').val().replace(/\./g, '').replace(',', '.')) * 100) / 100 || 0;
                const entregaInicial = Math.round(parseFloat($('#entrega_inicial').val().replace(/\./g, '').replace(',', '.')) * 100) / 100 || 0;
                const totalContado = <?php echo $total_contado; ?>;
                const montoEntrega = <?php echo $total_primera_cuota; ?>;
                let totalAPagar = totalContado + montoEntrega;
                
                // Ajustar el total a pagar si hay entrega inicial
                if (entregaInicial > 0) {
                    // El crédito final ya incluye el descuento de la entrega inicial
                    const totalCreditoOriginal = <?php echo $total_credito_final; ?>;
                    $('.total-credito-restante').text('<?php echo $config['moneda']; ?> ' + totalCreditoOriginal.toLocaleString('es-PY', {minimumFractionDigits: <?php echo $config['con_decimales']; ?>, maximumFractionDigits: <?php echo $config['con_decimales']; ?>}));
                    totalAPagar = totalContado + montoEntrega + entregaInicial;
                }

                const diferencia = Math.round((montoRecibido - totalAPagar) * 100) / 100;
                
                const mensajeDiv = $('#mensaje_calculo');
                
                if (montoRecibido === 0) {
                    mensajeDiv.hide();
                    return;
                }
                
                if (diferencia > 0) {
                    mensajeDiv
                        .removeClass('alert-danger alert-info')
                        .addClass('alert-success')
                        .html(`Su vuelto es <?php echo $config['moneda']; ?> ${diferencia.toLocaleString('es-PY')}`)
                        .show();
                } else if (diferencia < 0) {
                    mensajeDiv
                        .removeClass('alert-success alert-info')
                        .addClass('alert-danger')
                        .html(`Hay un faltante de <?php echo $config['moneda']; ?> ${Math.abs(diferencia).toLocaleString('es-PY')}`)
                        .show();
                } else {
                    mensajeDiv
                        .removeClass('alert-danger alert-success')
                        .addClass('alert-info')
                        .html('Monto exacto')
                        .show();
                }
            }

            // Agregar los event listeners para los campos
            $('#monto_recibido, #entrega_inicial').on('input', function() {
                actualizarCalculos();
            });

            // Modificar la sección de eliminación de productos
            document.querySelectorAll('.eliminar-producto').forEach(button => {
                button.addEventListener('click', function() {
                    const id = this.dataset.id;
                    const venta = this.dataset.venta;
                    
                    Swal.fire({
                        title: '¿Está seguro?',
                        text: "¿Desea eliminar este producto de la venta?",
                        icon: 'warning',
                        showCancelButton: true,
                        confirmButtonColor: '<?php echo $config['color_principal']; ?>',
                        cancelButtonColor: '#d33',
                        confirmButtonText: 'Sí, eliminar',
                        cancelButtonText: 'Cancelar'
                    }).then((result) => {
                        if (result.isConfirmed) {
                            fetch('eliminar_producto_venta.php', {
                                method: 'POST',
                                headers: {
                                    'Content-Type': 'application/x-www-form-urlencoded',
                                },
                                body: `id=${id}&venta_id=${venta}`
                            })
                            .then(response => response.json())
                            .then(data => {
                                if (data.success) {
                                    // Actualizar la página para refrescar los totales
                                    window.location.href = `ventas_en_curso.php?venta_id=${venta}`;
                                } else {
                                    Swal.fire({
                                        title: 'Error',
                                        text: data.message || 'Error al eliminar el producto',
                                        icon: 'error'
                                    });
                                }
                            })
                            .catch(error => {
                                console.error('Error:', error);
                                Swal.fire({
                                    title: 'Error',
                                    text: 'Hubo un problema al procesar la solicitud',
                                    icon: 'error'
                                });
                            });
                        }
                    });
                });
            });
        });

        function mostrarFormularioRemision(ventaId) {
            window.location.href = `remision.php?venta_id=${ventaId}`;
        }
    </script>
    
</body>

</html>
