<?php
// factura_arca.php
// Muestra formulario para autorizar una proforma en ARCA/AFIP

require_once __DIR__ . '/../config.php';

try {
    $dsn = "mysql:host={$sql_details['host']};dbname={$sql_details['db']};port={$sql_details['port']};charset=utf8";
    $pdo = new PDO($dsn, $sql_details['user'], $sql_details['pass'], [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ]);
} catch (PDOException $e) {
    die("Error de conexión a la base de datos: " . htmlspecialchars($e->getMessage()));
}

// 1) Obtener invoice_id
$invoiceId = isset($_GET['invoice_id']) ? trim($_GET['invoice_id']) : '';

if ($invoiceId === '') {
    die('Falta parámetro invoice_id');
}

// 2) Cargar encabezado: selling_info + selling_price + customer + store
$sql = "
    SELECT 
        si.*,
        sp.subtotal,
        sp.discount_type,
        sp.discount_amount,
        sp.item_tax,
        sp.order_tax,
        sp.shipping_amount,
        sp.others_charge,
        sp.payable_amount,
        c.customer_name,
        c.customer_cuit,
        c.customer_address,
        c.customer_city,
        c.customer_state,
        c.customer_country,
        c.customer_iva_cond,
        c.customer_doc_tipo,
        s.name AS store_name,
        s.address AS store_address,
        s.afip_cuit,
        s.afip_iva_cond,
        s.afip_iibb,
        s.afip_punto_venta_arca,
        s.afip_ambiente
    FROM selling_info si
    JOIN selling_price sp 
      ON sp.invoice_id = si.invoice_id 
     AND sp.store_id   = si.store_id
    JOIN customers c 
      ON c.customer_id = si.customer_id
    JOIN stores s
      ON s.store_id = si.store_id
    WHERE si.invoice_id = :invoice_id
    LIMIT 1
";

$stmt = $pdo->prepare($sql);
$stmt->execute(['invoice_id' => $invoiceId]);
$encabezado = $stmt->fetch();

if (!$encabezado) {
    die('No se encontró la proforma con ese invoice_id');
}

// 3) Cargar ítems de la proforma
$sqlItems = "
    SELECT si.*
    FROM selling_item si
    WHERE si.invoice_id = :invoice_id
";
$stmtItems = $pdo->prepare($sqlItems);
$stmtItems->execute(['invoice_id' => $invoiceId]);
$items = $stmtItems->fetchAll();

// 4) Cargar IVA por producto desde product_to_store
$mapIva = [];
$sqlIva = "
    SELECT product_id, iva
    FROM product_to_store
    WHERE store_id = :store_id
";
$stmtIva = $pdo->prepare($sqlIva);
$stmtIva->execute(['store_id' => $encabezado['store_id']]);
foreach ($stmtIva as $row) {
    $mapIva[$row['product_id']] = (float)$row['iva'];
}

// 5) Calcular valores por defecto para el receptor (docTipo/docNro)
// docNro: desde CUIT quitar 2 primeros y 1 último (DNI base)
$docTipo = (int)($encabezado['customer_doc_tipo'] ?? 96); // 96 = DNI por defecto
$docNro  = 0;

if (!empty($encabezado['customer_cuit'])) {
    $cuitLimpio = preg_replace('/\D+/', '', $encabezado['customer_cuit']);
    if (strlen($cuitLimpio) === 11) {
        // quita 2 primeros y el último (8 dígitos centrales)
        $dniBase = substr($cuitLimpio, 2, 8);
        $docNro  = (int)$dniBase;
        if (empty($encabezado['customer_doc_tipo'])) {
            $docTipo = 96; // DNI
        }
    }
}

// Concepto por defecto: productos
$conceptoDefault = 1;

// Punto de venta (ARCA) por defecto
$puntoVentaDefault = (int)($encabezado['afip_punto_venta_arca'] ?? 1);

// Ambiente
$ambiente = $encabezado['afip_ambiente'] ?? 'HOMO';

// Totales base (solo informativos, los nuevos se calculan con JS)
$impTotal = (float)$encabezado['payable_amount'];
$itemTax  = (float)$encabezado['item_tax'];
$orderTax = (float)$encabezado['order_tax'];
$impIva   = $itemTax + $orderTax;
$impNeto  = $impTotal - $impIva;
if ($impNeto < 0) {
    $impNeto = 0;
}

// Fecha de comprobante por defecto: hoy
$hoy = date('Y-m-d');
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Autorizar proforma <?= htmlspecialchars($invoiceId); ?> en ARCA</title>
    <link rel="stylesheet"
          href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container py-4">
    <h3 class="mb-3">Autorizar proforma en ARCA / AFIP</h3>

    <!-- Encabezado general -->
    <div class="card mb-3">
        <div class="card-header">Datos generales</div>
        <div class="card-body">
            <div class="row">
                <div class="col-md-6 mb-2">
                    <h5>Empresa (emisor)</h5>
                    <p class="mb-1"><strong>Nombre:</strong> <?= htmlspecialchars($encabezado['store_name']); ?></p>
                    <p class="mb-1"><strong>CUIT:</strong> <?= htmlspecialchars($encabezado['afip_cuit']); ?></p>
                    <p class="mb-1"><strong>IVA:</strong> <?= htmlspecialchars($encabezado['afip_iva_cond']); ?></p>
                    <p class="mb-1"><strong>IIBB:</strong> <?= htmlspecialchars($encabezado['afip_iibb']); ?></p>
                    <p class="mb-1"><strong>Ambiente:</strong> <?= htmlspecialchars($ambiente); ?></p>
                </div>
                <div class="col-md-6 mb-2">
                    <h5>Cliente (receptor)</h5>
                    <p class="mb-1"><strong>Nombre:</strong> <?= htmlspecialchars($encabezado['customer_name']); ?></p>
                    <p class="mb-1"><strong>CUIT/DNI:</strong> <?= htmlspecialchars($encabezado['customer_cuit']); ?></p>
                    <p class="mb-1"><strong>IVA:</strong> <?= htmlspecialchars($encabezado['customer_iva_cond']); ?></p>
                    <p class="mb-1"><strong>Domicilio:</strong>
                        <?= htmlspecialchars($encabezado['customer_address']); ?>,
                        <?= htmlspecialchars($encabezado['customer_city']); ?>,
                        <?= htmlspecialchars($encabezado['customer_state']); ?>
                    </p>
                </div>
            </div>
        </div>
    </div>

    <!-- Resumen de totales original (solo referencia) -->
    <div class="card mb-3">
        <div class="card-header">Resumen de totales (proforma original)</div>
        <div class="card-body">
            <p class="mb-1"><strong>Proforma #</strong> <?= htmlspecialchars($invoiceId); ?></p>
            <p class="mb-1"><strong>Subtotal:</strong> $ <?= number_format((float)$encabezado['subtotal'], 2, ',', '.'); ?></p>
            <p class="mb-1"><strong>IVA (items + orden):</strong> $ <?= number_format($impIva, 2, ',', '.'); ?></p>
            <p class="mb-1"><strong>Cotizacion USD:</strong> $ <?= number_format((float)$encabezado['others_charge'], 2, ',', '.'); ?></p>
            <p class="mb-1"><strong>Total proforma:</strong> $ <?= number_format($impTotal, 2, ',', '.'); ?></p>
        </div>
    </div>

    <!-- Formulario para elegir tipo de comprobante -->
    <form method="post" action="factura_arca_procesar.php" class="card" id="formArca">
        <div class="card-header">Parámetros para ARCA / AFIP</div>
        <div class="card-body">

            <!-- Bloque de errores de validación -->
            <div id="formErrors" class="alert alert-danger d-none small"></div>

            <input type="hidden" name="invoice_id" value="<?= htmlspecialchars($invoiceId); ?>">
            <input type="hidden" name="info_id" value="<?= (int)$encabezado['info_id']; ?>">
            <input type="hidden" name="store_id" value="<?= (int)$encabezado['store_id']; ?>">
            <input type="hidden" name="customer_id" value="<?= (int)$encabezado['customer_id']; ?>">

           <div class="row">
    <div class="col-md-4 mb-3">
        <label class="form-label">Tipo de comprobante</label>
        <select name="cbte_tipo_letra" class="form-select" required>
            <!-- value = tipo|letra -->
            <option value="6|B" <?= $cbteTipoLetraDefault === '6|B' ? 'selected' : ''; ?>>Factura B</option>
            <option value="1|A" <?= $cbteTipoLetraDefault === '1|A' ? 'selected' : ''; ?>>Factura A</option>
            <option value="3|A">Nota de Crédito A</option>
            <option value="8|B">Nota de Crédito B</option>
            <option value="2|A">Nota de Débito A</option>
            <option value="7|B">Nota de Débito B</option>
        </select>
    </div>


    <div class="col-md-4 mb-3">
        <label class="form-label">Punto de venta</label>
        <input type="number" name="punto_venta"
               class="form-control"
               value="<?= $puntoVentaDefault; ?>" required>
    </div>
<!-- Comprobante asociado (solo NC / ND) -->
<div class="mt-3" id="rowCbteAsoc" style="display:none;">
    <h5>Comprobante asociado (solo NC / ND)</h5>
    <div class="row">
        <div class="col-md-3 mb-3">
            <label class="form-label">Tipo comprobante asociado</label>
            <input type="number" name="cbte_asoc_tipo" class="form-control"
                   value="<?= htmlspecialchars($cbteAsocTipo ?? ''); ?>"
                   placeholder="1=F A, 6=F B, etc.">
            <div class="form-text small">
                Ej: 1=Factura A, 3=NC A, 6=Factura B, 8=NC B, etc.
            </div>
        </div>
        <div class="col-md-3 mb-3">
            <label class="form-label">Pto Vta asociado</label>
            <input type="number" name="cbte_asoc_pv" class="form-control"
                   value="<?= htmlspecialchars($cbteAsocPv ?? ''); ?>" min="1">
        </div>
        <div class="col-md-3 mb-3">
            <label class="form-label">Número comprobante asociado</label>
            <input type="number" name="cbte_asoc_nro" class="form-control"
                   value="<?= htmlspecialchars($cbteAsocNro ?? ''); ?>" min="1">
        </div>
    </div>
    <div class="form-text mb-3 small">
        Obligatorio si estás emitiendo Nota de Crédito / Débito (Tipos 2,3,7,8).
        Debe referenciar a la factura original que se está ajustando.
    </div>
</div>

    <div class="col-md-4 mb-3">
        <label class="form-label">Concepto</label>
        <select name="concepto" class="form-select" required>
            <option value="1" <?= $conceptoDefault == 1 ? 'selected' : ''; ?>>Productos</option>
            <option value="2" <?= $conceptoDefault == 2 ? 'selected' : ''; ?>>Servicios</option>
            <option value="3" <?= $conceptoDefault == 3 ? 'selected' : ''; ?>>Productos + Servicios</option>
        </select>
    </div>
</div>



            <!-- Fechas de servicio -->
            <div class="row">
                <div class="col-md-4 mb-3">
                    <label class="form-label">Fecha comprobante</label>
                    <input type="date" name="fecha_cbte" value="<?= $hoy; ?>" class="form-control" required>
                </div>
                <div class="col-md-4 mb-3">
                    <label class="form-label">F. serv. desde</label>
                    <input type="date" name="fch_serv_desde" value="<?= $hoy; ?>" class="form-control">
                </div>
                <div class="col-md-4 mb-3">
                    <label class="form-label">F. serv. hasta</label>
                    <input type="date" name="fch_serv_hasta" value="<?= $hoy; ?>" class="form-control">
                </div>
            </div>

            <!-- Documento del receptor -->
            <div class="row">
                <div class="col-md-4 mb-3">
                    <label class="form-label">DocTipo (receptor)</label>
                    <input type="number" name="doc_tipo" value="<?= $docTipo; ?>" class="form-control" required>
                    <div class="form-text">80 = CUIT, 96 = DNI, 99 = sin identificar</div>
                </div>
                <div class="col-md-8 mb-3">
                    <label class="form-label">DocNro (receptor)</label>
                    <input type="text" name="doc_nro" value="<?= $docNro; ?>" class="form-control" required>
                </div>
            </div>
            <div class="row">
    <div class="col-md-6 mb-3">
        <label class="form-label">Condición IVA del receptor</label>
        <select name="condicion_iva_receptor_id" class="form-select" required>
            <option value="">-- Seleccionar --</option>
            <option value="1"  <?= ($condicionIvaReceptorId ?? '') == 1  ? 'selected' : '' ?>>IVA Responsable Inscripto</option>
            <option value="6"  <?= ($condicionIvaReceptorId ?? '') == 6  ? 'selected' : '' ?>>Responsable Monotributo</option>
            <option value="13" <?= ($condicionIvaReceptorId ?? '') == 13 ? 'selected' : '' ?>>Monotributista Social</option>
            <option value="16" <?= ($condicionIvaReceptorId ?? '') == 16 ? 'selected' : '' ?>>Monotributo Trab. Indep. Promovido</option>
            <option value="4"  <?= ($condicionIvaReceptorId ?? '') == 4  ? 'selected' : '' ?>>IVA Sujeto Exento</option>
            <option value="5"  <?= ($condicionIvaReceptorId ?? '') == 5  ? 'selected' : '' ?>>Consumidor Final</option>
            <option value="7"  <?= ($condicionIvaReceptorId ?? '') == 7  ? 'selected' : '' ?>>Sujeto No Categorizado</option>
            <option value="8"  <?= ($condicionIvaReceptorId ?? '') == 8  ? 'selected' : '' ?>>Proveedor del Exterior</option>
            <option value="9"  <?= ($condicionIvaReceptorId ?? '') == 9  ? 'selected' : '' ?>>Cliente del Exterior</option>
            <option value="10" <?= ($condicionIvaReceptorId ?? '') == 10 ? 'selected' : '' ?>>IVA Liberado – Ley 19.640</option>
            <option value="15" <?= ($condicionIvaReceptorId ?? '') == 15 ? 'selected' : '' ?>>IVA No Alcanzado</option>
        </select>
        <div class="form-text">
            Este valor se envía al WS como <code>CondicionIVAReceptorId</code>.
        </div>
    </div>
</div>


            <!-- Ítems con P. Unit editable, IVA por producto y cálculo de totales -->
            <div class="mb-3">
                <label class="form-label">Ítems</label>
                <div class="table-responsive" style="max-height: 300px; overflow-y:auto;">
                    <table class="table table-sm table-striped mb-0">
                        <thead>
                        <tr>
                            <th>Código</th>
                            <th>Descripción</th>
                            <th class="text-end">Cant.</th>
                            <th class="text-end">P. Unit.</th>
                            <th class="text-end">IVA %</th>
                            <th class="text-end">Neto</th>
                            <th class="text-end">IVA</th>
                            <th class="text-end">Total</th>
                        </tr>
                        </thead>
                        <tbody>
                        <?php
                        $index = 0;
                        foreach ($items as $it):
                            $productId   = $it['item_id']; // asumiendo que es el product_id
                            $cantidad    = (float)$it['item_quantity'];
                            $precioUnit  = (float)$it['item_price'];
                            $ivaPercent  = isset($mapIva[$productId]) ? (float)$mapIva[$productId] : 21.00;
                            $neto        = $cantidad * $precioUnit;
                            $ivaImporte  = $neto * $ivaPercent / 100;
                            $totalLinea  = $neto + $ivaImporte;
                        ?>
                            <tr data-item-row="1" data-cantidad="<?= htmlspecialchars($cantidad); ?>">
                                <td>
                                    <?= htmlspecialchars($productId); ?>
                                    <input type="hidden" name="items[<?= $index; ?>][product_id]"
                                           value="<?= htmlspecialchars($productId); ?>">
                                    <input type="hidden" name="items[<?= $index; ?>][selling_item_id]"
                                           value="<?= isset($it['id']) ? (int)$it['id'] : 0; ?>">
                                </td>
                                <td>
                                    <?= htmlspecialchars($it['item_name']); ?>
                                    <input type="hidden" name="items[<?= $index; ?>][descripcion]"
                                           value="<?= htmlspecialchars($it['item_name'], ENT_QUOTES, 'UTF-8'); ?>">
                                </td>
                                <td class="text-end">
                                    <?= number_format($cantidad, 2, ',', '.'); ?>
                                    <input type="hidden" name="items[<?= $index; ?>][cantidad]"
                                           value="<?= number_format($cantidad, 4, '.', ''); ?>">
                                </td>
                                <td class="text-end" style="min-width: 90px;">
                                    <input type="number"
                                           step="0.0001"
                                           min="0"
                                           class="form-control form-control-sm text-end js-precio-unitario"
                                           name="items[<?= $index; ?>][precio_unitario]"
                                           value="<?= number_format($precioUnit, 4, '.', ''); ?>">
                                </td>
                                <td class="text-end" style="min-width: 70px;">
                                    <input type="number"
                                           step="0.01"
                                           class="form-control form-control-sm text-end js-iva-porcentaje"
                                           name="items[<?= $index; ?>][iva_porcentaje]"
                                           value="<?= number_format($ivaPercent, 2, '.', ''); ?>"
                                           required>
                                </td>
                                <td class="text-end js-neto">
                                    <?= number_format($neto, 2, ',', '.'); ?>
                                </td>
                                <td class="text-end js-iva-importe">
                                    <?= number_format($ivaImporte, 2, ',', '.'); ?>
                                </td>
                                <td class="text-end js-total-linea">
                                    <?= number_format($totalLinea, 2, ',', '.'); ?>
                                </td>
                            </tr>
                        <?php
                            $index++;
                        endforeach;
                        ?>
                        </tbody>
                    </table>
                </div>
            </div>

            <!-- Resumen calculado con IVA + IIBB -->
            <div class="mt-3">
                <div class="row g-3">
                    <div class="col-md-3">
                        <label class="form-label">Ingresos Brutos (IIBB)</label>
                        <input type="number"
                               step="0.01"
                               class="form-control text-end"
                               name="iibb_importe"
                               id="iibb_importe"
                               value="0.00">
                    </div>
                    <div class="col-md-9">
                        <table class="table table-sm mb-0">
                            <tr>
                                <th style="width: 40%;">Neto gravado</th>
                                <td class="text-end" id="res_neto">0,00</td>
                            </tr>
                            <tr>
                                <th>IVA total</th>
                                <td class="text-end" id="res_iva">0,00</td>
                            </tr>
                            <tr>
                                <th>IIBB</th>
                                <td class="text-end" id="res_iibb">0,00</td>
                            </tr>
                            <tr>
                                <th>Total final</th>
                                <td class="text-end fw-bold" id="res_total">0,00</td>
                            </tr>
                        </table>
                    </div>
                </div>

                <!-- Totales ocultos para enviar al backend -->
                <input type="hidden" name="total_neto" id="total_neto_hidden" value="0.0000">
                <input type="hidden" name="total_iva" id="total_iva_hidden" value="0.0000">
                <input type="hidden" name="total_iibb" id="total_iibb_hidden" value="0.0000">
                <input type="hidden" name="total_general" id="total_general_hidden" value="0.0000">
            </div>

        </div>
        <div class="card-footer d-flex justify-content-between">
            <a href="facturas_arca_list.php" class="btn btn-secondary">Volver</a>
            <button type="submit" class="btn btn-primary">
                Autorizar en ARCA / AFIP
            </button>
        </div>
    </form>
</div>

<script>
(function() {
    function parseNum(v) {
        v = (v || '').toString().replace(',', '.');
        var n = parseFloat(v);
        return isNaN(n) ? 0 : n;
    }

    function formatMoney(num) {
        return num.toLocaleString('es-AR', {minimumFractionDigits: 2, maximumFractionDigits: 2});
    }

    function recalcularTotales() {
        var filas = document.querySelectorAll('tr[data-item-row]');
        var totalNeto = 0;
        var totalIva  = 0;

        filas.forEach(function(tr) {
            var cantidad = parseNum(tr.getAttribute('data-cantidad'));
            var precioInput = tr.querySelector('.js-precio-unitario');
            var ivaInput    = tr.querySelector('.js-iva-porcentaje');
            var celdaNeto   = tr.querySelector('.js-neto');
            var celdaIva    = tr.querySelector('.js-iva-importe');
            var celdaTotal  = tr.querySelector('.js-total-linea');

            var precio = parseNum(precioInput && precioInput.value);
            var ivaPct = parseNum(ivaInput && ivaInput.value);

            var neto = cantidad * precio;
            var iva  = neto * ivaPct / 100;
            var total = neto + iva;

            totalNeto += neto;
            totalIva  += iva;

            if (celdaNeto)  celdaNeto.textContent  = formatMoney(neto);
            if (celdaIva)   celdaIva.textContent   = formatMoney(iva);
            if (celdaTotal) celdaTotal.textContent = formatMoney(total);
        });

        var iibbInput   = document.getElementById('iibb_importe');
        var iibbImporte = parseNum(iibbInput && iibbInput.value);

        var totalFinal = totalNeto + totalIva + iibbImporte;

        document.getElementById('res_neto').textContent  = formatMoney(totalNeto);
        document.getElementById('res_iva').textContent   = formatMoney(totalIva);
        document.getElementById('res_iibb').textContent  = formatMoney(iibbImporte);
        document.getElementById('res_total').textContent = formatMoney(totalFinal);

        document.getElementById('total_neto_hidden').value    = totalNeto.toFixed(4);
        document.getElementById('total_iva_hidden').value     = totalIva.toFixed(4);
        document.getElementById('total_iibb_hidden').value    = iibbImporte.toFixed(4);
        document.getElementById('total_general_hidden').value = totalFinal.toFixed(4);
    }
    // Mostrar / ocultar campos de comprobante asociado según tipo de comprobante
    function toggleComprobanteAsociado() {
        var form = document.getElementById('formArca');
        if (!form) return;

        var selTipo = form.querySelector('select[name="cbte_tipo_letra"]');
        var rowAsoc = document.getElementById('rowCbteAsoc');
        if (!selTipo || !rowAsoc) return;

        var val = selTipo.value || '';
        var partes = val.split('|');
        var tipoNum = partes.length ? parseInt(partes[0], 10) || 0 : 0;

        var esNota = (tipoNum === 2 || tipoNum === 3 || tipoNum === 7 || tipoNum === 8);

        rowAsoc.style.display = esNota ? '' : 'none';

        // Si no es nota, limpiamos los campos
        if (!esNota) {
            var pv = form.querySelector('input[name="cbte_asoc_pv"]');
            var nro = form.querySelector('input[name="cbte_asoc_nro"]');
            if (pv) pv.value = '';
            if (nro) nro.value = '';
        }
    }

    // VALIDACIÓN ANTES DE ENVIAR
    function validarFormulario() {
        var errores = [];
                var cbteTipoSel  = form.querySelector('select[name="cbte_tipo_letra"]');
        var cbteAsocPv   = form.querySelector('input[name="cbte_asoc_pv"]');
        var cbteAsocNro  = form.querySelector('input[name="cbte_asoc_nro"]');


        var form = document.getElementById('formArca');
        var docTipoInput = form.querySelector('input[name="doc_tipo"]');
        var docNroInput  = form.querySelector('input[name="doc_nro"]');
        var pvInput      = form.querySelector('input[name="punto_venta"]');
        var conceptoSel  = form.querySelector('select[name="concepto"]');
        var fechaCbte    = form.querySelector('input[name="fecha_cbte"]');
        var fchDesde     = form.querySelector('input[name="fch_serv_desde"]');
        var fchHasta     = form.querySelector('input[name="fch_serv_hasta"]');
        var totalGeneralHidden = document.getElementById('total_general_hidden');

        var docTipo = parseInt(docTipoInput.value, 10) || 0;
        var docNroStr = (docNroInput.value || '').replace(/\D+/g, '');
        var pv = parseInt(pvInput.value, 10) || 0;
        var concepto = parseInt(conceptoSel.value, 10) || 0;
        var totalGeneral = parseNum(totalGeneralHidden.value);

        // DocTipo y DocNro básicos
        if (!docTipo) {
            errores.push('El DocTipo del receptor es obligatorio.');
        }
        //if (!docNroStr || docNroStr.length < 7) {
          //  errores.push('El DocNro del receptor es obligatorio y debe tener al menos 7 dígitos.');
     //   }
        if (docTipo === 80 && docNroStr.length !== 11) {
            errores.push('Para DocTipo 80 (CUIT), el DocNro debe tener 11 dígitos.');
        }
        if (docTipo === 96 && (docNroStr.length < 7 || docNroStr.length > 9)) {
            errores.push('Para DocTipo 96 (DNI), el DocNro debería tener entre 7 y 9 dígitos.');
        }

        // Punto de venta
        if (!pv || pv <= 0) {
            errores.push('El punto de venta debe ser un número mayor a cero.');
        }

        // Fecha comprobante
        if (!fechaCbte.value) {
            errores.push('La fecha del comprobante es obligatoria.');
        }

        // Fechas de servicio si es concepto 2 o 3
        if (concepto === 2 || concepto === 3) {
            if (!fchDesde.value || !fchHasta.value) {
                errores.push('Para servicios (concepto 2 o 3) debe indicar fechas de servicio desde/hasta.');
            } else if (fchDesde.value > fchHasta.value) {
                errores.push('La fecha de servicio DESDE no puede ser mayor que la fecha HASTA.');
            }
        }

                // Comprobante asociado obligatorio en Notas de Crédito / Débito
        if (cbteTipoSel) {
            var val = cbteTipoSel.value || '';
            var partes = val.split('|');
            var tipoNum = partes.length ? parseInt(partes[0], 10) || 0 : 0;
            var esNota = (tipoNum === 2 || tipoNum === 3 || tipoNum === 7 || tipoNum === 8);

            if (esNota) {
                var pvAsoc  = cbteAsocPv && cbteAsocPv.value ? parseInt(cbteAsocPv.value, 10) || 0 : 0;
                var nroAsoc = cbteAsocNro && cbteAsocNro.value ? parseInt(cbteAsocNro.value, 10) || 0 : 0;
                if (!pvAsoc || !nroAsoc) {
                    errores.push('Para Notas de Crédito / Débito debe indicar el comprobante asociado (PtoVta y Número).');
                }
            }
        }


        // Verificación de ítems
        // Verificación de ítems
var filas = document.querySelectorAll('tr[data-item-row]');
if (!filas.length) {
    errores.push('La factura debe tener al menos un ítem.');
} else {
    filas.forEach(function(tr, idx) {
        var precioInput = tr.querySelector('.js-precio-unitario');
        var ivaInput    = tr.querySelector('.js-iva-porcentaje');
        var cantidad    = parseNum(tr.getAttribute('data-cantidad'));
        var precio      = parseNum(precioInput && precioInput.value);

        // Leer IVA tal cual se ve en el input
        var ivaRaw = ivaInput ? (ivaInput.value || '') : '';
        var ivaPct = parseFloat(ivaRaw.toString().replace(',', '.'));

        if (cantidad <= 0) {
            errores.push('La cantidad del ítem #' + (idx + 1) + ' debe ser mayor a cero.');
        }

        if (precio <= 0) {
            errores.push('El precio unitario del ítem #' + (idx + 1) + ' debe ser mayor a cero.');
        }

        // 🔴 IVA obligatorio y > 0, igual de estricto que el docNro
        if (!ivaInput || ivaRaw.trim() === '') {
            errores.push('El IVA del ítem #' + (idx + 1) + ' es obligatorio.');
        } else if (isNaN(ivaPct)) {
            errores.push('El IVA del ítem #' + (idx + 1) + ' debe ser un número válido.');
        } else if (ivaPct <= 0) {
            errores.push('El IVA del ítem #' + (idx + 1) + ' debe ser mayor a 0.');
        }
    });
}


        // Total general
        if (totalGeneral <= 0) {
            errores.push('El total de la factura debe ser mayor a cero.');
        }

        // Mostrar errores si los hay
        var errorBox = document.getElementById('formErrors');
        if (errores.length) {
            var html = '<strong>Por favor corrija los siguientes puntos antes de autorizar:</strong><ul class="mb-0">';
            errores.forEach(function(err) {
                html += '<li>' + err + '</li>';
            });
            html += '</ul>';
            errorBox.innerHTML = html;
            errorBox.classList.remove('d-none');
            return false;
        } else {
            errorBox.innerHTML = '';
            errorBox.classList.add('d-none');
            return true;
        }
    }

    document.addEventListener('input', function(e) {
        if (e.target.classList.contains('js-precio-unitario') ||
            e.target.classList.contains('js-iva-porcentaje') ||
            e.target.id === 'iibb_importe') {
            recalcularTotales();
        }
    });

        document.addEventListener('DOMContentLoaded', function() {
        recalcularTotales();
        toggleComprobanteAsociado();

        var form = document.getElementById('formArca');

        // Cambio de tipo de comprobante: mostrar/ocultar asociado
        if (form) {
            var selTipo = form.querySelector('select[name="cbte_tipo_letra"]');
            if (selTipo) {
                selTipo.addEventListener('change', toggleComprobanteAsociado);
            }
        }

        form.addEventListener('submit', function(e) {
            // recalculamos por si no lo había hecho
            recalcularTotales();
            if (!validarFormulario()) {
                e.preventDefault();
                e.stopPropagation();
            }
        });
    });

})();
</script>
</body>
</html>
