<?php
declare(strict_types=1);
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/functions.php';

$pageTitle = 'Detalle de Factura';
$activeMenu = 'consultas';
$activePage = 'ventas';
$basePath = '..';

$conn = db();
$token = csrfToken();

$factura = parseCodigo($_GET['factura'] ?? null);
if ($factura === null) {
    header('Location: ventas.php');
    exit;
}

$stmt = $conn->prepare(
    'SELECT f.factura, f.fecha, f.valor_neto, f.valor_iva, f.valor_total, f.num_items,
            f.codigo_cliente, c.nombre AS cliente_nombre, c.direccion, c.telefono, c.ciudad,
            f.cod_vendedor, v.nombre AS vendedor_nombre
     FROM facturas f
     LEFT JOIN clientes c ON c.codigo_cliente = f.codigo_cliente
     LEFT JOIN vendedores v ON v.cod_vendedor = f.cod_vendedor
     WHERE f.factura = ?'
);
$stmt->bind_param('s', $factura);
$stmt->execute();
$cabecera = $stmt->get_result()->fetch_assoc();
$stmt->close();

if (!$cabecera) {
    require __DIR__ . '/../includes/header.php';
    echo '<div class="alert alert-danger">La factura <strong>' . h($factura) . '</strong> no existe.</div>';
    echo '<a href="ventas.php" class="btn btn-secondary btn-sm"><i class="bi bi-arrow-left"></i> Volver a Ventas</a>';
    require __DIR__ . '/../includes/footer.php';
    exit;
}

$stmtLineas = $conn->prepare(
    'SELECT vd.id, vd.codigo_producto, p.titulo, vd.cantidad, vd.precio, vd.valor_neto, vd.tarifa_iva, vd.valor_iva
     FROM ventas_detalle vd
     LEFT JOIN productos p ON p.codigo = vd.codigo_producto
     WHERE vd.factura = ?
     ORDER BY vd.id'
);
$stmtLineas->bind_param('s', $factura);
$stmtLineas->execute();
$lineas = $stmtLineas->get_result();

require __DIR__ . '/../includes/header.php';
?>
<div class="d-flex justify-content-between align-items-center mb-3">
  <h4 class="mb-0"><i class="bi bi-receipt"></i> Factura <?= h($cabecera['factura']) ?></h4>
  <a href="ventas.php" class="btn btn-outline-secondary btn-sm"><i class="bi bi-arrow-left"></i> Volver a Ventas</a>
</div>

<div class="card shadow-sm mb-3">
  <div class="card-body">
    <div class="row g-3">
      <div class="col-md-2">
        <div class="text-muted small">Fecha</div>
        <div><?= h($cabecera['fecha']) ?></div>
      </div>
      <div class="col-md-3">
        <div class="text-muted small">Cliente</div>
        <div><?= h($cabecera['codigo_cliente']) ?> — <?= h($cabecera['cliente_nombre']) ?></div>
      </div>
      <div class="col-md-3">
        <div class="text-muted small">Dirección / Ciudad</div>
        <div><?= h($cabecera['direccion']) ?>, <?= h($cabecera['ciudad']) ?></div>
      </div>
      <div class="col-md-2">
        <div class="text-muted small">Teléfono</div>
        <div><?= h($cabecera['telefono']) ?></div>
      </div>
      <div class="col-md-2">
        <div class="text-muted small">Vendedor</div>
        <div><?= h($cabecera['vendedor_nombre']) ?></div>
      </div>
    </div>
  </div>
</div>

<div class="row g-3 mb-3">
  <div class="col-md-3">
    <div class="card kpi-card"><div class="card-body">
      <div class="kpi-label">Valor neto</div>
      <div class="kpi-value" id="kpiNeto" style="font-size:1.3rem"><?= money((float) $cabecera['valor_neto']) ?></div>
    </div></div>
  </div>
  <div class="col-md-3">
    <div class="card kpi-card"><div class="card-body">
      <div class="kpi-label">IVA</div>
      <div class="kpi-value" id="kpiIva" style="font-size:1.3rem"><?= money((float) $cabecera['valor_iva']) ?></div>
    </div></div>
  </div>
  <div class="col-md-3">
    <div class="card kpi-card"><div class="card-body">
      <div class="kpi-label">Total factura</div>
      <div class="kpi-value text-primary" id="kpiTotal" style="font-size:1.3rem"><?= money((float) $cabecera['valor_total']) ?></div>
    </div></div>
  </div>
  <div class="col-md-3">
    <div class="card kpi-card"><div class="card-body">
      <div class="kpi-label">Ítems</div>
      <div class="kpi-value" id="kpiItems" style="font-size:1.3rem"><?= (int) $cabecera['num_items'] ?></div>
    </div></div>
  </div>
</div>

<div class="card shadow-sm mb-3">
  <div class="card-header bg-white"><strong>Agregar producto a la factura</strong></div>
  <div class="card-body">
    <form id="formAgregar" class="row g-2 align-items-end">
      <input type="hidden" name="csrf_token" value="<?= h($token) ?>">
      <div class="col-md-2">
        <label class="form-label">Código</label>
        <input type="text" id="fpCodigo" class="form-control form-control-sm" required>
      </div>
      <div class="col-md-4">
        <label class="form-label">Producto</label>
        <input type="text" id="fpProducto" class="form-control form-control-sm" readonly placeholder="Se completa al escribir el código">
      </div>
      <div class="col-md-2">
        <label class="form-label">Cantidad</label>
        <input type="number" id="fpCantidad" class="form-control form-control-sm" min="0.01" step="0.01" required>
      </div>
      <div class="col-md-2">
        <label class="form-label">Precio</label>
        <input type="number" id="fpPrecio" class="form-control form-control-sm" min="0" step="0.01" required>
      </div>
      <div class="col-md-2">
        <button type="submit" class="btn btn-primary btn-sm w-100"><i class="bi bi-plus-circle"></i> Agregar</button>
      </div>
    </form>
    <div id="msgAgregar" class="mt-2"></div>
  </div>
</div>

<div class="card shadow-sm">
  <div class="card-body">
    <table class="table table-striped table-hover align-middle" id="tblLineas">
      <thead>
        <tr>
          <th>Código</th><th>Producto</th><th class="text-end">Cantidad</th><th class="text-end">Precio</th>
          <th class="text-end">Valor neto</th><th class="text-end">IVA</th><th class="text-end">Total</th><th>Acciones</th>
        </tr>
      </thead>
      <tbody>
        <?php while ($l = $lineas->fetch_assoc()): ?>
        <tr data-id="<?= (int) $l['id'] ?>" data-cantidad="<?= (float) $l['cantidad'] ?>" data-precio="<?= (float) $l['precio'] ?>">
          <td><?= h($l['codigo_producto']) ?></td>
          <td><?= h($l['titulo']) ?></td>
          <td class="text-end celda-cantidad"><?= number_format((float) $l['cantidad'], 2) ?></td>
          <td class="text-end celda-precio"><?= number_format((float) $l['precio'], 2) ?></td>
          <td class="text-end celda-neto"><?= money((float) $l['valor_neto']) ?></td>
          <td class="text-end celda-iva"><?= money((float) $l['valor_iva']) ?></td>
          <td class="text-end celda-total"><?= money((float) $l['valor_neto'] + (float) $l['valor_iva']) ?></td>
          <td class="text-nowrap celda-acciones">
            <a href="#" class="link-primary me-2 btn-modificar"><i class="bi bi-pencil"></i> Modificar</a>
            <a href="#" class="link-danger btn-eliminar"><i class="bi bi-trash"></i> Eliminar</a>
          </td>
        </tr>
        <?php endwhile; ?>
      </tbody>
    </table>
    <?php if ((int) $cabecera['num_items'] === 0): ?>
    <div class="text-muted text-center py-3">Esta factura no tiene productos. Agrega uno arriba.</div>
    <?php endif; ?>
  </div>
</div>

<?php
$facturaJson = json_encode($factura, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
$extraScripts = <<<HTML
<script>
const FACTURA = {$facturaJson};
const CSRF = document.querySelector('input[name=csrf_token]').value;

document.getElementById('fpCodigo').addEventListener('blur', async function () {
  const codigo = this.value.trim();
  const prodInput = document.getElementById('fpProducto');
  prodInput.value = '';
  if (!codigo) return;
  const resp = await fetch('../api/producto_info.php?codigo=' + encodeURIComponent(codigo));
  const data = await resp.json();
  if (data.ok) {
    prodInput.value = data.producto.titulo;
  } else {
    prodInput.value = '';
    alert('Producto no encontrado: ' + codigo);
  }
});

document.getElementById('formAgregar').addEventListener('submit', async function (e) {
  e.preventDefault();
  const body = new URLSearchParams({
    csrf_token: CSRF, accion: 'agregar', factura: FACTURA,
    codigo_producto: document.getElementById('fpCodigo').value.trim(),
    cantidad: document.getElementById('fpCantidad').value,
    precio: document.getElementById('fpPrecio').value,
  });
  const resp = await fetch('../api/factura_lineas.php', { method: 'POST', body });
  const data = await resp.json();
  if (data.ok) {
    window.location.reload();
  } else {
    document.getElementById('msgAgregar').innerHTML = '<div class="alert alert-danger py-1 px-2 mb-0">' + data.error + '</div>';
  }
});

document.querySelectorAll('.btn-eliminar').forEach(function (btn) {
  btn.addEventListener('click', async function (e) {
    e.preventDefault();
    if (!confirm('¿Eliminar esta línea de la factura?')) return;
    const id = this.closest('tr').dataset.id;
    const body = new URLSearchParams({ csrf_token: CSRF, accion: 'eliminar', factura: FACTURA, id: id });
    const resp = await fetch('../api/factura_lineas.php', { method: 'POST', body });
    const data = await resp.json();
    if (data.ok) { window.location.reload(); } else { alert(data.error); }
  });
});

document.querySelectorAll('.btn-modificar').forEach(function (btn) {
  btn.addEventListener('click', function (e) {
    e.preventDefault();
    const tr = this.closest('tr');
    const cantidadActual = tr.dataset.cantidad;
    const precioActual = tr.dataset.precio;

    tr.querySelector('.celda-cantidad').innerHTML =
      '<input type="number" class="form-control form-control-sm text-end input-cantidad" min="0.01" step="0.01" value="' + cantidadActual + '">';
    tr.querySelector('.celda-precio').innerHTML =
      '<input type="number" class="form-control form-control-sm text-end input-precio" min="0" step="0.01" value="' + precioActual + '">';
    tr.querySelector('.celda-acciones').innerHTML =
      '<a href="#" class="link-success me-2 btn-guardar"><i class="bi bi-check-lg"></i> Guardar</a>' +
      '<a href="#" class="link-secondary btn-cancelar"><i class="bi bi-x-lg"></i> Cancelar</a>';

    tr.querySelector('.btn-cancelar').addEventListener('click', function (e) {
      e.preventDefault();
      window.location.reload();
    });

    tr.querySelector('.btn-guardar').addEventListener('click', async function (e) {
      e.preventDefault();
      const nuevaCantidad = tr.querySelector('.input-cantidad').value;
      const nuevoPrecio = tr.querySelector('.input-precio').value;
      const body = new URLSearchParams({
        csrf_token: CSRF, accion: 'editar', factura: FACTURA, id: tr.dataset.id,
        cantidad: nuevaCantidad, precio: nuevoPrecio,
      });
      const resp = await fetch('../api/factura_lineas.php', { method: 'POST', body });
      const data = await resp.json();
      if (data.ok) { window.location.reload(); } else { alert(data.error); }
    });
  });
});
</script>
HTML;
require __DIR__ . '/../includes/footer.php';
?>
