<div class="content-wrapper">
    <section class="content-header">
        <h1>Nuevo Comprobante desde Guía de Remisión</h1>
    </section>

    <section class="content">
        <form method="post" action="<?php echo base_url('index.php/ventas/comprobante/store_desde_guia'); ?>" id="formComprobanteGuia">

            <?php foreach($guias_ids as $id): ?>
                <input type="hidden" name="guias_ids[]" value="<?php echo $id; ?>">
            <?php endforeach; ?>

            <input type="hidden" id="igv_porcentaje" value="<?php echo (float)$tributo_igv->valor_porcentual; ?>">
            <input type="hidden" id="igv_modo" value="<?php echo (int)$tributo_igv->modo; ?>">
            <input type="hidden" id="total_anticipos" value="<?php echo number_format((float)$total_anticipos, 2, '.', ''); ?>">
            <input type="hidden" id="cliente_tiene_retencion" value="<?php echo !empty($retencion_cliente) ? 1 : 0; ?>">
            <input type="hidden" id="cliente_retencion_porcentaje" value="<?php echo !empty($retencion_cliente) ? (float)$retencion_cliente->porcentaje : 0; ?>">
            <input type="hidden" id="cliente_retencion_monto_minimo" value="<?php echo !empty($retencion_cliente) ? (float)$retencion_cliente->monto_minimo : 0; ?>">

            <div class="box box-info">
                <div class="box-header with-border">
                    <h3 class="box-title">Guías Seleccionadas</h3>
                </div>
                <div class="box-body">
                    <div class="alert alert-info">
                        Todas las guías seleccionadas serán facturadas al 100%.
                    </div>

                    <table class="table table-bordered table-striped">
                        <thead>
                            <tr>
                                <th>Guía</th>
                                <th>Cliente</th>
                                <th>Fecha Traslado</th>
                                <th>Orden</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach($guias as $g): ?>
                                <tr>
                                    <td><?php echo $g->serie . '-' . $g->numero; ?></td>
                                    <td><?php echo $g->cliente_nombre; ?></td>
                                    <td><?php echo $g->fecha_traslado; ?></td>
                                    <td><?php echo $g->orp_id; ?></td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>

                    <?php if((float)$total_anticipos > 0): ?>
                        <div class="alert alert-warning">
                            Esta orden tiene anticipos registrados por:
                            <strong><?php echo number_format((float)$total_anticipos, 2); ?></strong>
                        </div>
                    <?php endif; ?>
                </div>
            </div>
            <div class="alert alert-info">
                <strong>Guías relacionadas:</strong>
                <?php
                    $refs = array();
                    foreach ($guias as $g) {
                        $refs[] = $g->serie . '-' . $g->numero;
                    }
                    echo implode(', ', $refs);
                ?>
            </div>
            <div class="box box-primary">
                <div class="box-header with-border">
                    <h3 class="box-title">Datos del Comprobante</h3>
                </div>
                <div class="box-body">

                    <div class="row">
                        <div class="col-md-3">
                            <label>Tipo de comprobante</label>
                            <select name="comprobante_id" id="comprobante_id" class="form-control" required>
                                <option value="">Seleccione...</option>
                                <?php foreach($tipos_comprobante as $item): ?>
                                    <option value="<?php echo $item->id; ?>">
                                        <?php echo $item->nombre; ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>

                        <div class="col-md-3">
                            <label>Fecha</label>
                            <input type="datetime-local" name="fecha" class="form-control" value="<?php echo date('Y-m-d\TH:i'); ?>" required>
                        </div>

                        <div class="col-md-3">
                            <label>Forma de pago</label>
                            <select name="fp_id" id="fp_id" class="form-control" required disabled>
                                <option value="">Seleccione...</option>
                                <?php foreach($formas_pago as $item): ?>
                                    <option value="<?php echo $item->id; ?>"
                                            data-codigo="<?php echo strtoupper($item->codigo); ?>"
                                            data-nombre="<?php echo strtoupper($item->nombre); ?>">
                                        <?php echo $item->nombre; ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>

                        <div class="col-md-3">
                            <label>Tipo Cambio</label>
                            <input type="number" step="0.001" name="tipocambio" class="form-control" value="1.000">
                        </div>
                        <!-- CAMPO ALMACÉN — agregar en el mismo row de los datos del comprobante -->
                        <div class="col-md-3">
                            <div class="form-group">
                                <label>Almacén <span class="text-danger">*</span></label>
                                <select name="almacen_id" id="almacen_id" class="form-control" required>
                                    <option value="">Seleccione...</option>
                                    <?php foreach($almacenes as $item): ?>
                                        <option value="<?php echo $item->id; ?>">
                                            <?php echo $item->nombre; ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>
                    </div>

                    <label>Observaciones</label>
                    <textarea name="observaciones" class="form-control" rows="2"><?php
                        $refs = array();
                        foreach ($guias as $g) {
                            $refs[] = $g->serie . '-' . $g->numero;
                        }
                        echo 'COMPROBANTE GENERADO DESDE GUÍA(S): ' . implode(', ', $refs);
                    ?></textarea>
                </div>
            </div>

            <div class="box box-primary">
                <div class="box-header with-border">
                    <h3 class="box-title">Detalle</h3>
                </div>
                <div class="box-body">

                    <table class="table table-bordered table-striped" id="tablaDetalle">
                        <thead>
                            <tr>
                                <th>Producto</th>
                                <th>U.M.</th>
                                <th>Cantidad</th>
                                <th>Precio Unit.</th>
                                <th>Subtotal</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach($detalle_guia as $item): ?>
                                <?php
                                    $cantidad = (float)$item->cantidad;
                                    $precio = (float)$item->orpd_precio_unitario;
                                    $subtotal = $cantidad * $precio;
                                ?>
                                <tr>
                                    <td>
                                        <?php echo $item->producto_codigo . ' - ' . $item->producto_nombre; ?>
                                        <input type="hidden" name="detalle_producto_id[]" value="<?php echo $item->producto_id; ?>">
                                        <input type="hidden" name="detalle_descripcion[]" value="<?php echo $item->producto_nombre; ?>">
                                        <input type="hidden" class="detalle-detraccion-id" value="<?php echo (int)$item->detraccion_id; ?>">
                                        <input type="hidden" class="detalle-detraccion-nombre" value="<?php echo !empty($item->detraccion_nombre) ? htmlspecialchars($item->detraccion_nombre, ENT_QUOTES, 'UTF-8') : ''; ?>">
                                        <input type="hidden" class="detalle-detraccion-porcentaje" value="<?php echo isset($item->detraccion_porcentaje) ? (float)$item->detraccion_porcentaje : 0; ?>">
                                        <input type="hidden" class="detalle-detraccion-monto-minimo" value="<?php echo isset($item->detraccion_monto_minimo) ? (float)$item->detraccion_monto_minimo : 0; ?>">
                                    </td>
                                    <td><?php echo $item->unidad_abreviada; ?></td>
                                    <td>
                                        <input type="number" name="detalle_cantidad[]" class="form-control detalle-cantidad" value="<?php echo number_format($cantidad, 2, '.', ''); ?>" readonly>
                                    </td>
                                    <td>
                                        <input type="number" name="detalle_precio_unitario[]" class="form-control detalle-precio" value="<?php echo number_format($precio, 4, '.', ''); ?>" readonly>
                                    </td>
                                    <td>
                                        <input type="number" name="detalle_subtotal[]" class="form-control detalle-subtotal" value="<?php echo number_format($subtotal, 2, '.', ''); ?>" readonly>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>

                    <div class="row">
                        <div class="col-md-3 col-md-offset-9">
                            <table class="table table-bordered">
                                <tr><th>Subtotal</th><td><input type="text" id="resumen_subtotal" class="form-control text-right" readonly></td></tr>
                                <tr><th>IGV</th><td><input type="text" id="resumen_igv" class="form-control text-right" readonly></td></tr>
                                <tr><th>Total</th><td><input type="text" id="resumen_total" class="form-control text-right" readonly></td></tr>
                                <tr><th>Anticipo</th><td><input type="text" id="resumen_anticipo" class="form-control text-right" readonly></td></tr>
                                <tr><th>Pago Neto</th><td><input type="text" id="resumen_pago_neto" class="form-control text-right" readonly></td></tr>
                            </table>
                        </div>
                    </div>

                </div>
            </div>

            <div class="box box-default" id="bloqueCuotas" style="display:none;">
                <div class="box-header with-border">
                    <h3 class="box-title">Cuotas</h3>
                </div>
                <div class="box-body">
                    <button type="button" id="btnAgregarCuota" class="btn btn-primary">
                        <i class="fa fa-plus"></i> Agregar cuota
                    </button>

                    <br><br>

                    <table class="table table-bordered" id="tablaCuotas">
                        <thead>
                            <tr>
                                <th>Nro Cuota</th>
                                <th>Fecha Vencimiento</th>
                                <th>Importe</th>
                                <th>Acción</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr id="filaSinCuotas">
                                <td colspan="4" class="text-center">No hay cuotas agregadas</td>
                            </tr>
                        </tbody>
                    </table>

                    <div class="row">
                        <div class="col-md-3 col-md-offset-9">
                            <label>Total cuotas</label>
                            <input type="text" id="total_cuotas" class="form-control text-right" readonly value="0.00">
                        </div>
                    </div>
                </div>
            </div>

            <button class="btn btn-primary">
                <i class="fa fa-save"></i> Guardar Comprobante
            </button>

            <a href="<?php echo base_url('index.php/almacen/guiaremitente'); ?>" class="btn btn-default">
                Cancelar
            </a>

        </form>
    </section>
</div>

<script>

window.addEventListener('load', function () {
    var contadorCuotas = 0;

    function alternarCuotas() {
        var comprobanteId = $('#comprobante_id').val();
        var fpOption = $('#fp_id option:selected');
        var fpCodigo = (fpOption.data('codigo') || '').toString().toUpperCase();
        var fpNombre = (fpOption.data('nombre') || '').toString().toUpperCase();

        var esFactura = (parseInt(comprobanteId, 10) === 1);
        var esCredito = (fpCodigo === 'CREDITO' || fpNombre === 'CREDITO');

        if (esFactura && esCredito) {
            $('#bloqueCuotas').show();
        } else {
            $('#bloqueCuotas').hide();
            $('#tablaCuotas tbody').html('<tr id="filaSinCuotas"><td colspan="4" class="text-center">No hay cuotas agregadas</td></tr>');
            contadorCuotas = 0;
            recalcularTotalCuotas();
        }
    }

    function recalcularTotalCuotas() {
        var total = 0;
        $('input[name="cuota_importe[]"]').each(function () {
            total += parseFloat($(this).val()) || 0;
        });
        $('#total_cuotas').val(total.toFixed(2));
    }

    function renumerarCuotas() {
        var nro = 1;
        $('#tablaCuotas tbody tr').not('#filaSinCuotas').each(function () {
            $(this).find('.nro-cuota-texto').text(nro);
            $(this).find('input[name="cuota_nro[]"]').val(nro);
            nro++;
        });
        contadorCuotas = nro - 1;
    }

    function recalcularDetraccion(saldoBase) {
        var detracciones = [];
        var detraccionInfo = null;

        $('#tablaDetalle tbody tr').each(function () {
            var detraccionId = parseInt($(this).find('.detalle-detraccion-id').val(), 10) || 0;
            var detraccionNombre = $(this).find('.detalle-detraccion-nombre').val() || '';
            var detraccionPorcentaje = parseFloat($(this).find('.detalle-detraccion-porcentaje').val()) || 0;
            var detraccionMontoMinimo = parseFloat($(this).find('.detalle-detraccion-monto-minimo').val()) || 0;

            if (detraccionId > 1) {
                detracciones.push(detraccionId);
                detraccionInfo = {
                    id: detraccionId,
                    nombre: detraccionNombre,
                    porcentaje: detraccionPorcentaje,
                    monto_minimo: detraccionMontoMinimo
                };
            }
        });

        detracciones = [...new Set(detracciones)];
        var comprobanteId = parseInt($('#comprobante_id').val(), 10) || 0;
        var esFactura = (comprobanteId === 1);

        if (detracciones.length > 1) {
            $('#bloqueDetraccion').show();
            $('#detraccion_nombre').val('ERROR: múltiples detracciones');
            $('#detraccion_base').val(saldoBase.toFixed(2));
            $('#detraccion_porcentaje_texto').val('--');
            $('#detraccion_importe').val('0.00');
            $('#detraccion_pago_neto').val(saldoBase.toFixed(2));
            return { aplica: false, pagoNeto: saldoBase };
        }

        if (esFactura && detracciones.length === 1 && detraccionInfo && saldoBase >= detraccionInfo.monto_minimo) {
            var importeDet = saldoBase * (detraccionInfo.porcentaje / 100);
            var pagoNeto = saldoBase - importeDet;

            $('#detraccion_nombre').val(detraccionInfo.nombre);
            $('#detraccion_base').val(saldoBase.toFixed(2));
            $('#detraccion_porcentaje_texto').val(detraccionInfo.porcentaje.toFixed(2) + '%');
            $('#detraccion_importe').val(importeDet.toFixed(2));
            $('#detraccion_pago_neto').val(pagoNeto.toFixed(2));
            $('#bloqueDetraccion').show();

            return { aplica: true, pagoNeto: pagoNeto };
        } else {
            $('#detraccion_nombre').val('');
            $('#detraccion_base').val('0.00');
            $('#detraccion_porcentaje_texto').val('0.00%');
            $('#detraccion_importe').val('0.00');
            $('#detraccion_pago_neto').val(saldoBase.toFixed(2));
            $('#bloqueDetraccion').hide();

            return { aplica: false, pagoNeto: saldoBase };
        }
    }

    function recalcularRetencion(saldoBase, aplicaDetraccion) {
        if (aplicaDetraccion) {
            $('#retencion_base').val('0.00');
            $('#retencion_porcentaje_texto').val('0.00%');
            $('#retencion_importe').val('0.00');
            $('#retencion_pago_neto').val(saldoBase.toFixed(2));
            $('#bloqueRetencion').hide();
            return saldoBase;
        }

        var tieneRetencion = parseInt($('#cliente_tiene_retencion').val(), 10) || 0;
        var porcentajeRet = parseFloat($('#cliente_retencion_porcentaje').val()) || 0;
        var montoMinimoRet = parseFloat($('#cliente_retencion_monto_minimo').val()) || 0;
        var comprobanteId = parseInt($('#comprobante_id').val(), 10) || 0;
        var esFactura = (comprobanteId === 1);

        if (tieneRetencion === 1 && esFactura && saldoBase >= montoMinimoRet) {
            var importeRet = saldoBase * (porcentajeRet / 100);
            var pagoNeto = saldoBase - importeRet;

            $('#retencion_base').val(saldoBase.toFixed(2));
            $('#retencion_porcentaje_texto').val(porcentajeRet.toFixed(2) + '%');
            $('#retencion_importe').val(importeRet.toFixed(2));
            $('#retencion_pago_neto').val(pagoNeto.toFixed(2));
            $('#bloqueRetencion').show();

            return pagoNeto;
        } else {
            $('#retencion_base').val('0.00');
            $('#retencion_porcentaje_texto').val('0.00%');
            $('#retencion_importe').val('0.00');
            $('#retencion_pago_neto').val(saldoBase.toFixed(2));
            $('#bloqueRetencion').hide();

            return saldoBase;
        }
    }

    function recalcularTotales() {
        var modo = parseInt($('#igv_modo').val(), 10);
        var porcentaje = parseFloat($('#igv_porcentaje').val()) || 0;
        var sumaDetalle = 0;
        var anticipo = parseFloat($('#total_anticipos').val()) || 0;

        $('input[name="detalle_subtotal[]"]').each(function () {
            sumaDetalle += parseFloat($(this).val()) || 0;
        });

        var subtotal = 0;
        var igv = 0;
        var total = 0;

        if (modo === 1) {
            total = sumaDetalle;
            subtotal = total / (1 + (porcentaje / 100));
            igv = total - subtotal;
        } else {
            subtotal = sumaDetalle;
            igv = subtotal * (porcentaje / 100);
            total = subtotal + igv;
        }

        var saldoBase = total - anticipo;
        if (saldoBase < 0) {
            saldoBase = 0;
        }

        $('#resumen_subtotal').val(subtotal.toFixed(2));
        $('#resumen_igv').val(igv.toFixed(2));
        $('#resumen_total').val(total.toFixed(2));
        $('#resumen_anticipo').val(anticipo.toFixed(2));

        var det = recalcularDetraccion(saldoBase);
        var pagoNeto = recalcularRetencion(saldoBase, det.aplica);

        if (det.aplica) {
            pagoNeto = det.pagoNeto;
        }

        $('#resumen_pago_neto').val(pagoNeto.toFixed(2));
    }

    $(document).on('keyup change', '.detalle-cantidad, .detalle-precio', function () {
        var fila = $(this).closest('tr');
        var cantidad = parseFloat(fila.find('.detalle-cantidad').val()) || 0;
        var precio = parseFloat(fila.find('.detalle-precio').val()) || 0;
        var subtotal = cantidad * precio;

        fila.find('.detalle-subtotal').val(subtotal.toFixed(2));
        recalcularTotales();
    });

    $('#comprobante_id').on('change', function () {
        $('#fp_id').prop('disabled', $(this).val() === '');
        alternarCuotas();
        recalcularTotales();
    });

    $('#fp_id').on('change', function () {
        alternarCuotas();
        recalcularTotales();
    });

    $('#btnAgregarCuota').on('click', function () {
        $('#filaSinCuotas').remove();

        contadorCuotas++;

        var fila = '';
        fila += '<tr>';
        fila += '<td><span class="nro-cuota-texto">' + contadorCuotas + '</span><input type="hidden" name="cuota_nro[]" value="' + contadorCuotas + '"></td>';
        fila += '<td><input type="date" name="cuota_fecha[]" class="form-control" required></td>';
        fila += '<td><input type="number" step="0.01" min="0.01" name="cuota_importe[]" class="form-control cuota-importe" value="0.00" required></td>';
        fila += '<td><button type="button" class="btn btn-danger btn-xs btnEliminarCuota"><i class="fa fa-trash"></i></button></td>';
        fila += '</tr>';

        $('#tablaCuotas tbody').append(fila);
        recalcularTotalCuotas();
    });

    $(document).on('keyup change', '.cuota-importe', function () {
        recalcularTotalCuotas();
    });

    $(document).on('click', '.btnEliminarCuota', function () {
        $(this).closest('tr').remove();

        if ($('#tablaCuotas tbody tr').length === 0) {
            $('#tablaCuotas tbody').html('<tr id="filaSinCuotas"><td colspan="4" class="text-center">No hay cuotas agregadas</td></tr>');
        }

        renumerarCuotas();
        recalcularTotalCuotas();
    });

    $('#fp_id').prop('disabled', $('#comprobante_id').val() === '');
    recalcularTotales();
});


</script>