<?php
// nueva_factura_ri.php

include 'conexion3.php';
$conn->set_charset('utf8mb4');

// ---------------------------------------------------------
// MODO AJAX: devolver siguiente número para Compra Z
// ---------------------------------------------------------
if (isset($_GET['get_next_z'])) {
    header('Content-Type: application/json; charset=utf-8');

    // Buscar último numero_factura donde tipo_doc = 'z'
    $sql = "
        SELECT numero_factura
        FROM facturas
        WHERE LOWER(tipo_doc) = 'z'
        ORDER BY CAST(numero_factura AS UNSIGNED) DESC
        LIMIT 1
    ";

    $next = 1;

    if ($res = $conn->query($sql)) {
        if ($row = $res->fetch_assoc()) {
            $num = $row['numero_factura'];

            // Extraer solo dígitos (por si hay prefijos/sufijos)
            $solo_num = preg_replace('/\D/', '', (string)$num);

            if ($solo_num !== '') {
                $len = strlen($solo_num);
                $val = (int)$solo_num + 1;
                // Mantener padding con ceros
                $next = str_pad($val, $len, '0', STR_PAD_LEFT);
            } else {
                $next = 1;
            }
        } else {
            // Si no hay ninguna Z, arrancamos en 1
            $next = 1;
        }
        $res->free();
    }

    echo json_encode(['next_z' => $next]);
    exit;
}

// ---------------------------------------------------------
// MODO NORMAL: mostrar formulario
// ---------------------------------------------------------
$proveedores = $conn->query("SELECT sup_id, sup_name FROM suppliers ORDER BY sup_name");
if (!$proveedores) { die("Error cargando proveedores"); }
?>
<!doctype html>
<html lang="es">
<head>
  <meta charset="utf-8">
  <title>Nueva factura proveedor</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
  <script src="https://code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>
  <style>
    .grid { display: grid; gap: 12px; }
    .grid-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
    .grid-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
    .right { text-align:right; }
    .table { width:100%; border-collapse: collapse; }
    .table th, .table td { border:1px solid #ddd; padding:6px; }
    .muted { color:#777; font-size:12px; }
    .btn { padding:6px 10px; border:1px solid #ccc; background:#f7f7f7; cursor:pointer; }
    .btn-primary { background:#1d72b8; color:#fff; border-color:#16649d; }
    .btn-danger { background:#c0392b; color:#fff; border-color:#a93226; }
    .btn-light { background:#eee; }
    .chip { background:#eef; padding:3px 6px; border-radius:4px; font-size:12px; }
    .inline-group { display:flex; gap:8px; align-items:center; }
  </style>
</head>
<body>
  <h2>Registrar factura / NC / ND (proveedor)</h2>

  <form action="procesar_factura.php" method="post" id="frm">
    <!-- Encabezado -->
    <fieldset class="grid grid-3">
      <div>
        <label>Proveedor</label>
        <select name="proveedor_id" required>
          <option value="">-- Seleccione --</option>
          <?php while($r=$proveedores->fetch_assoc()){ ?>
            <option value="<?php echo (int)$r['sup_id'];?>"><?php echo htmlspecialchars($r['sup_name']);?></option>
          <?php } ?>
        </select>
      </div>
      <div>
        <label>Tipo Doc</label>
        <select name="tipo_doc" id="tipo_doc" required>
          <option value="factura" selected>Factura</option>
          <option value="nc">Nota de Crédito</option>
          <option value="nd">Nota de Débito</option>
          <option value="z">Compra Z</option>
        </select>
      </div>
      <div>
        <label>Tipo Comprobante (AFIP)</label>
        <input type="number" min="0" name="tipo_cbte" placeholder="1=A, 6=B, 11=C, 13=Z">
      </div>

      <!-- Aquí va el input + botón "Cargar número Z" -->
      <div>
        <label>Nº Comprobante</label>
        <div class="inline-group">
          <input type="text" name="numero_factura" id="numero_factura" required>
          <button type="button" class="btn btn-light" id="btn_cargar_numero_z">
            Cargar número Z
          </button>
        </div>
        <div class="muted">Usa el último comprobante Z + 1</div>
      </div>

      <div>
        <label>Fecha emisión</label>
        <input type="date" name="fecha_emision" required>
      </div>
      <div>
        <label>Fecha vencimiento</label>
        <input type="date" name="fecha_vencimiento">
      </div>
      <div id="doc_rel" style="display:none;">
        <label>Comprobante relacionado (para NC/ND)</label>
        <input type="text" name="doc_relacionado" placeholder="Nº de factura origen">
      </div>
      <div>
        <label>Moneda</label>
        <select name="moneda" id="moneda" required>
          <option value="ARS" selected>ARS</option>
          <option value="USD">USD</option>
        </select>
      </div>
      <div>
        <label>Tipo cambio</label>
        <input type="number" step="0.000001" min="0" name="tipo_cambio" id="tipo_cambio" value="1.000000">
        <div class="muted">Si USD, se usará para registrar equivalentes en ARS.</div>
      </div>
    </fieldset>

    <!-- Búsqueda de productos -->
    <fieldset>
      <legend>Productos/Servicios</legend>
      <div style="display:flex; gap:8px; align-items:center;">
        <input type="text" id="buscar_producto" placeholder="Buscar producto..." style="flex:1;">
        <button type="button" class="btn" id="btn_add_busqueda">Agregar seleccionado</button>
        <span class="muted">Autocomplete via <span class="chip">buscar_producto.php</span></span>
      </div>
      <table class="table" id="tabla-items" style="margin-top:10px;">
        <thead>
          <tr>
            <th>Producto</th>
            <th class="right">Cantidad</th>
            <th class="right">Precio</th>
            <th class="right">IVA %</th>
            <th class="right">Desc (importe)</th>
            <th class="right">Subtotal</th>
            <th></th>
          </tr>
        </thead>
        <tbody></tbody>
      </table>
      <button type="button" class="btn" id="btn_add_fila">+ Fila vacía</button>
    </fieldset>

    <!-- Conceptos / Percepciones / Retenciones -->
    <fieldset class="grid grid-3" style="margin-top:14px;">
      <div>
        <label>Exento</label>
        <input type="number" step="0.01" min="0" name="exento" value="0.00">
      </div>
      <div>
        <label>No gravado</label>
        <input type="number" step="0.01" min="0" name="no_gravado" value="0.00">
      </div>
      <div>
        <label>Percepción IVA</label>
        <input type="number" step="0.01" min="0" name="perc_iva" value="0.00" readonly>
      </div>
      <div>
        <label>Percep. IIBB SALTA</label>
        <input type="number" step="0.01" min="0" id="perc_iibb_salta" value="0.00">
      </div>
      <div>
        <label>Percep. IIBB OTRAS</label>
        <input type="number" step="0.01" min="0" id="perc_iibb_otras" value="0.00">
      </div>
      <div>
        <label>Flete</label>
        <input type="number" step="0.01" min="0" id="flete" value="0.00">
      </div>
      <div>
        <label>Retenc. IIBB SALTA</label>
        <input type="number" step="0.01" min="0" id="ret_iibb_salta" value="0.00">
      </div>
      <div>
        <label>Retenc. IIBB OTRAS</label>
        <input type="number" step="0.01" min="0" id="ret_iibb_otras" value="0.00">
      </div>
      <div>
        <label>Otros impuestos</label>
        <input type="number" step="0.01" min="0" name="otros_imp" id="otros_imp" value="0.00">
      </div>
      <div>
        <label>Impuesto total fijo</label>
        <input type="number" step="0.01" min="0" name="impuesto_total_fijo" id="impuesto_total_fijo" value="0.00">
      </div>
      <div>
        <label>Descuento total fijo</label>
        <input type="number" step="0.01" min="0" name="descuento_total_fijo" id="descuento_total_fijo" value="0.00">
      </div>
      <div>
        <label>Total Percepciones IIBB (se guarda en perc_iibb)</label>
        <input type="number" step="0.01" min="0" name="perc_iibb" id="perc_iibb" value="0.00" readonly>
        <div class="muted">Se suma Salta + Otras. Retenciones NO se suman aquí.</div>
      </div>
    </fieldset>

    <!-- Totales -->
    <fieldset class="grid grid-2" style="margin-top:14px;">
      <div>
        <label>Subtotal Ítems</label>
        <input class="right" type="number" step="0.01" name="subtotal_items" id="subtotal_items" value="0.00" readonly>
      </div>
      <div>
        <label>IVA Ítems</label>
        <input class="right" type="number" step="0.01" name="impuestos_items" id="impuestos_items" value="0.00" readonly>
      </div>
      <div>
        <label>Descuentos Ítems</label>
        <input class="right" type="number" step="0.01" name="descuentos_items" id="descuentos_items" value="0.00" readonly>
      </div>
      <div>
        <label>Total Final</label>
        <input class="right" type="number" step="0.01" name="total_final" id="total_final" value="0.00" readonly>
      </div>
    </fieldset>

    <!-- Hidden que usa el backend -->
    <input type="hidden" name="total_factura" id="total_factura">
    <input type="hidden" name="total_impuesto" id="total_impuesto">
    <input type="hidden" name="total_descuento" id="total_descuento">
    <input type="hidden" name="total_factura_final" id="total_factura_final">

    <div style="margin-top:14px; text-align:right;">
      <button class="btn btn-primary" type="submit">Guardar</button>
    </div>
  </form>

<script>
// --------- BOTÓN "Cargar número Z" ----------
$('#btn_cargar_numero_z').on('click', function(e){
  e.preventDefault();

  // Opcional: advertir si no está seleccionado tipo_doc = z
  if ($('#tipo_doc').val() !== 'z') {
    if (!confirm('El tipo de documento no es "Compra Z". ¿Igual querés cargar el próximo número Z?')) {
      return;
    }
  }

  $.ajax({
    url: 'nueva_factura.php',
    data: { get_next_z: 1 },
    dataType: 'json',
    success: function(resp) {
      if (resp && typeof resp.next_z !== 'undefined') {
        $('#numero_factura').val(resp.next_z);
      } else {
        alert('No se pudo obtener el próximo número Z.');
      }
    },
    error: function(xhr, status, error) {
      console.error('Error AJAX al obtener número Z:', error);
      alert('Error al obtener el número Z (ver consola).');
    }
  });
});

// --------- Mostrar doc relacionado para NC/ND ----------
function toggleRelacionado(){
  const t = $('#tipo_doc').val();
  if (t !== 'factura') {
    $('#doc_rel').show();
  } else {
    $('#doc_rel').hide();
  }
}
$('#tipo_doc').on('change', toggleRelacionado);
$(document).ready(function(){
  toggleRelacionado();
});

// --------- AUTOCOMPLETE PRODUCTOS ----------
$("#buscar_producto").autocomplete({
  source: "buscar_producto.php",
  minLength: 2,
  select: function(event, ui){
    $("#buscar_producto").val(ui.item.label);
    $("#buscar_producto").data("id", ui.item.id);
    $("#buscar_producto").data("code", ui.item.code);
    return false;
  }
});

function rowItem(data) {
  const tr = document.createElement('tr');
  tr.innerHTML = `
    <td>
      <input type="hidden" name="producto_id[]" value="${data.id||''}">
      <input type="hidden" name="producto_code[]" value="${data.code||''}">
      <input type="hidden" name="producto_name[]" value="${data.label||''}">
      ${data.label||''}
    </td>
    <td class="right"><input type="number" step="0.01" min="0" name="cantidad[]" value="${data.cantidad||'1'}"></td>
    <td class="right"><input type="number" step="0.01" min="0" name="precio[]" value="${data.precio||'0.00'}"></td>
    <td class="right">
      <select name="impuesto[]" class="iva_sel">
        <option value="0">0.00</option>
        <option value="10.5">10.50</option>
        <option value="21" selected>21.00</option>
        <option value="27">27.00</option>
      </select>
    </td>
    <td class="right"><input type="number" step="0.01" min="0" name="descuento[]" value="${data.descuento||'0.00'}"></td>
    <td class="right subtotalCell">$0.00</td>
    <td><button type="button" class="btn btn-danger btn-sm btn-del">X</button></td>
  `;
  return tr;
}

function recalcRow(tr){
  const cant = parseFloat(tr.querySelector('input[name="cantidad[]"]').value)||0;
  const precio = parseFloat(tr.querySelector('input[name="precio[]"]').value)||0;
  const iva = parseFloat(tr.querySelector('select[name="impuesto[]"]').value)||0;
  const desc = parseFloat(tr.querySelector('input[name="descuento[]"]').value)||0;
  const sub = cant * precio;
  const imp = sub * (iva/100);
  const tot = sub + imp - desc;
  tr.querySelector('.subtotalCell').textContent = "$" + tot.toFixed(2);
  return {sub, imp, desc, tot};
}

function recalcAll(){
  let sub=0, imp=0, desc=0, tot=0;
  document.querySelectorAll('#tabla-items tbody tr').forEach(tr=>{
    const r = recalcRow(tr);
    sub += r.sub; imp += r.imp; desc += r.desc; tot += r.tot;
  });

  // Percepciones IIBB
  const percSalta = parseFloat(document.getElementById('perc_iibb_salta').value)||0;
  const percOtras = parseFloat(document.getElementById('perc_iibb_otras').value)||0;
  const percIIBB = percSalta + percOtras;
  document.getElementById('perc_iibb').value = percIIBB.toFixed(2);

  // Retenciones (se descuentan)
  const retSalta = parseFloat(document.getElementById('ret_iibb_salta').value)||0;
  const retOtras = parseFloat(document.getElementById('ret_iibb_otras').value)||0;
  const retIIBB = retSalta + retOtras;

  const flete = parseFloat(document.getElementById('flete').value)||0;
  const percIVA = parseFloat(document.getElementsByName('perc_iva')[0].value)||0;
  const otrosImp = parseFloat(document.getElementById('otros_imp').value)||0;
  const impFijo = parseFloat(document.getElementById('impuesto_total_fijo').value)||0;
  const descFijo = parseFloat(document.getElementById('descuento_total_fijo').value)||0;

  // Total final = tot + flete + percIVA + percIIBB + otrosImp + impFijo - descFijo - retIIBB
  const totalFinal = tot + flete + percIVA + percIIBB + otrosImp + impFijo - descFijo - retIIBB;

  // Mostrar
  document.getElementById('subtotal_items').value = sub.toFixed(2);
  document.getElementById('impuestos_items').value = imp.toFixed(2);
  document.getElementById('descuentos_items').value = desc.toFixed(2);
  document.getElementById('total_final').value = totalFinal.toFixed(2);

  // Hidden para backend
  document.getElementById('total_factura').value = sub.toFixed(2);
  document.getElementById('total_impuesto').value = (imp + impFijo).toFixed(2);
  document.getElementById('total_descuento').value = (desc + descFijo).toFixed(2);
  document.getElementById('total_factura_final').value = totalFinal.toFixed(2);
}

document.getElementById('btn_add_fila').addEventListener('click', ()=>{
  const tr = rowItem({});
  document.querySelector('#tabla-items tbody').appendChild(tr);
  recalcAll();
});
document.getElementById('btn_add_busqueda').addEventListener('click', ()=>{
  const data = {
    id: $("#buscar_producto").data("id"),
    code: $("#buscar_producto").data("code"),
    label: $("#buscar_producto").val()
  };
  if(!data.id){ alert("Seleccioná un producto del desplegable."); return; }
  const tr = rowItem(data);
  document.querySelector('#tabla-items tbody').appendChild(tr);
  $("#buscar_producto").val('').removeData('id').removeData('code');
  recalcAll();
});

document.querySelector('#tabla-items tbody').addEventListener('input', function(e){
  if(e.target.matches('input, select')) recalcAll();
});
document.querySelector('#tabla-items tbody').addEventListener('click', function(e){
  if(e.target.classList.contains('btn-del')){
    e.target.closest('tr').remove(); recalcAll();
  }
});
['perc_iibb_salta','perc_iibb_otras','flete','otros_imp','impuesto_total_fijo','descuento_total_fijo'].forEach(id=>{
  document.getElementById(id).addEventListener('input', recalcAll);
});
document.getElementsByName('perc_iva')[0].addEventListener('input', recalcAll);

// TC default
document.getElementById('moneda').addEventListener('change', function(){
  if(this.value==='ARS' && parseFloat(document.getElementById('tipo_cambio').value)<=0){
    document.getElementById('tipo_cambio').value='1.000000';
  }
});
</script>

</body>
</html>
