const API_REP = '../../Controlador/Ctrl_Administrador/MySQL_Repuestos.php';

let tabla = null;

function initSelects(){
  // Repuesto (Select2 AJAX)
  $('#f_rep').select2({
    placeholder: 'Buscar repuesto...',
    allowClear: true,
    ajax: {
      url: API_REP,
      dataType: 'json',
      delay: 250,
      data: params => ({ action:'buscar_repuestos', q: params.term || '' }),
      processResults: data => data, // ya viene {results:[{id,text}]}
      cache: true
    }
  });

  // Almacén (carga única)
  $.getJSON(API_REP, {action:'listar_almacenes'}, function(r){
    const $alm = $('#f_alm');
    $alm.append('<option value="">Todos</option>');
    (r.results||[]).forEach(a=>{
      $alm.append(`<option value="${a.id}">${a.text}</option>`);
    });
  });
}

function construirTabla(){
  tabla = $('#tablaKardex').DataTable({
    data: [], // inicia vacío
    columns: [
      { data: 'id' },
      { data: 'creado_fecha' },
      { data: 'repuesto_txt' },
      { data: 'almacen_txt' },
      { data: 'tipo' },
      { data: 'cantidad', render: d => parseFloat(d).toFixed(3) },
      { data: 'costo_unitario', render: d => parseFloat(d).toFixed(4) },
      { data: null, render: r => {
          const ref = [];
          if (r.ref_tipo) ref.push(r.ref_tipo);
          if (r.ref_id)   ref.push(r.ref_id);
          return ref.join(' - ');
        } 
      },
      { data: 'observacion' },
      { data: 'creado_por' }
    ],
    order: [[1,'desc']],
    dom: 'Bfrtip',
    buttons: ['copy','csv','excel','pdf','print'],
    responsive: true,
    deferRender: true
  });
}

function cargarKardex(){
  const repId = $('#f_rep').val();
  if (!repId){
    Swal.fire('Atención','Selecciona un repuesto','info'); 
    return;
  }
  const almId = $('#f_alm').val();
  const fDesde = $('#f_desde').val();
  const fHasta = $('#f_hasta').val();

  // Traemos kardex del repuesto
  $.getJSON(API_REP, {action:'kardex', id_repuesto: repId}, function(r){
    if(!r.ok) return Swal.fire('Error','No se pudo cargar el kardex','error');
    let rows = r.data || [];

    // Enriquecer con textos (repuesto/almacén). Para repuesto podemos tomar texto del select2.
    const repTxt = $('#f_rep').find('option:selected').text() || '';
    // Necesitamos map de almacenes para nombre:
    $.getJSON(API_REP, {action:'listar_almacenes'}, function(a){
      const mapAlm = {};
      (a.results||[]).forEach(x=> mapAlm[x.id] = x.text);

      rows = rows.map(it=>({
        ...it,
        repuesto_txt: repTxt,
        almacen_txt: mapAlm[it.id_almacen] || it.id_almacen
      }));

      // Filtros locales: almacén + fechas
      if (almId) rows = rows.filter(x => String(x.id_almacen) === String(almId));
      if (fDesde) rows = rows.filter(x => x.creado_fecha.slice(0,10) >= fDesde);
      if (fHasta) rows = rows.filter(x => x.creado_fecha.slice(0,10) <= fHasta);

      tabla.clear().rows.add(rows).draw();
    });
  });
}

$(document).ready(function(){
  initSelects();
  construirTabla();
  $('#btnFiltrar').on('click', cargarKardex);
});
