/*=============================================
CARGAR LA TABLA DINÁMICA DE PRODUCTOS
=============================================*/
$('.tablaProductosMovimientos').DataTable({
    "ajax": "ajax/datatable-productos-movimientos.ajax.php",
    "deferRender": true,
    "retrieve": true,
    "processing": true,
    "language": {
        // (omitido por brevedad, igual que el tuyo)
    }
});


/*=============================================
AGREGAR PRODUCTOS A LA LISTA DESDE LA TABLA
=============================================*/
$(".tablaProductosMovimientos tbody").on("click", "button.agregarProducto", function() {

    var idProducto = $(this).attr("idProducto");
    $(this).removeClass("btn-primary agregarProducto").addClass("btn-default recuperarBoton");

    var datos = new FormData();
    datos.append("idProducto", idProducto);

    $.ajax({
        url: "ajax/productos.ajax.php",
        method: "POST",
        data: datos,
        cache: false,
        contentType: false,
        processData: false,
        dataType: "json",
        success: function(respuesta) {

            var descripcion = respuesta["descripcion"];
            var stock = Number(respuesta["stock"]);
            var precio = Number(respuesta["precio_compra"]);
            var attributeset_id = respuesta["attributeset_id"];

            // Suponemos entrada si código empieza con E
            var tipoMovimiento = $("#tipoMovimiento").val();
            var esEntrada = tipoMovimiento && tipoMovimiento.charAt(0) === 'E';

            var stockFinal = esEntrada ? stock + 1 : stock - 1;

            // Si es salida y no hay stock
            if (!esEntrada && stock <= 0) {
                swal({
                    title: "Sin stock",
                    text: "No puedes realizar una salida de un producto sin stock disponible",
                    type: "error",
                    confirmButtonText: "Cerrar"
                });

                $("button.recuperarBoton[idProducto='"+idProducto+"']").removeClass("btn-default").addClass("btn-primary agregarProducto");
                return;
            }

            $(".nuevoProducto").append(
                '<div class="row" style="padding:5px 15px">' +
                    '<div class="col-xs-4" style="padding-right:0px">' +
                        '<div class="input-group">' +
                            '<span class="input-group-addon"><button type="button" class="btn btn-danger btn-xs quitarProducto" idProducto="' + idProducto + '"><i class="fa fa-times"></i></button></span>' +
                            '<input type="text" class="form-control nuevaDescripcionProducto" idProducto="' + idProducto + '" name="agregarProducto" value="' + descripcion + '" readonly required>' +
                        '</div>' +
                    '</div>' +

                    '<div class="col-xs-2 ingresoCantidad">' +
                        '<input type="number" class="form-control nuevaCantidadProducto" name="nuevaCantidadProducto" min="1" value="1" stock="'+stock+'" nuevoStock="'+stockFinal+'" required>' +
                    '</div>' +

                    '<div class="col-xs-2 ingresoStock">' +
                        '<input type="text" class="form-control stockActual" value="' + stock + '" readonly>' +
                    '</div>' +

                    '<div class="col-xs-2 ingresoNuevoStock">' +
                        '<input type="text" class="form-control stockFinal" value="' + stockFinal + '" readonly>' +
                    '</div>' +

                    '<div class="col-xs-2 ingresoPrecio">' +
                        '<div class="input-group">' +
                            '<span class="input-group-addon"><i class="ion ion-social-usd"></i></span>' +
                            '<input type="text" class="form-control nuevoPrecioProducto" precioReal="' + precio + '" name="nuevoPrecioProducto" value="' + precio.toFixed(2) + '" required>' +
                        '</div>' +
                    '</div>' +

                    '<input type="hidden" class="attributeset_id" value="' + attributeset_id + '">' +
                '</div>'
            );

            listarProductos();
            $(".nuevoPrecioProducto").number(true, 2);
        }
    });
});


/*=============================================
QUITAR PRODUCTOS DE LA LISTA
=============================================*/
$(".formularioStock").on("click", "button.quitarProducto", function() {
    var idProducto = $(this).attr("idProducto");
    $(this).closest(".row").remove();

    $("button.recuperarBoton[idProducto='"+idProducto+"']").removeClass("btn-default").addClass("btn-primary agregarProducto");

    if ($(".nuevoProducto .row").length === 0) {
        $("#listaProductos").val("");
    } else {
        listarProductos();
    }
});


/*=============================================
CAMBIO EN CANTIDAD -> RECALCULAR NUEVO STOCK Y TOTAL
=============================================*/
$(".formularioStock").on("change", "input.nuevaCantidadProducto", function() {
    var $cantidad = $(this);
    var cantidad = Number($cantidad.val());
    var stock = Number($cantidad.attr("stock")) || 0;
    var tipoMovimiento = $("#tipoMovimiento").val();
    var esEntrada = tipoMovimiento && tipoMovimiento.charAt(0) === 'E';

    var nuevoStock = esEntrada ? stock + cantidad : stock - cantidad;
    $cantidad.attr("nuevoStock", nuevoStock);

    $cantidad.closest(".row").find(".stockFinal").val(nuevoStock);

    // Recalcular precio total de ese producto
    var precioUnitario = Number($cantidad.closest(".row").find(".nuevoPrecioProducto").attr("precioReal"));
    var total = cantidad * precioUnitario;
    $cantidad.closest(".row").find(".nuevoPrecioProducto").val(total.toFixed(2));

    listarProductos();
});


/*=============================================
LISTAR TODOS LOS PRODUCTOS
=============================================*/
function listarProductos() {
    var listaProductos = [];

    $(".nuevoProducto .row").each(function() {
        var id = $(this).find(".nuevaDescripcionProducto").attr("idProducto");
        var descripcion = $(this).find(".nuevaDescripcionProducto").val();
        var cantidad = $(this).find(".nuevaCantidadProducto").val();
        var stockAnterior = $(this).find(".nuevaCantidadProducto").attr("stock");
        var nuevoStock = $(this).find(".nuevaCantidadProducto").attr("nuevoStock");
        var precio = $(this).find(".nuevoPrecioProducto").attr("precioReal");
        var total = $(this).find(".nuevoPrecioProducto").val();

        listaProductos.push({
            "id": id,
            "descripcion": descripcion,
            "cantidad": cantidad,
            "stock": stockAnterior,
            "nuevoStock": nuevoStock,
            "precio": precio,
            "total": total
        });
    });

    $("#listaProductos").val(JSON.stringify(listaProductos));
}


/*=============================================
CONTROLAR VISIBILIDAD DEL PROVEEDOR
=============================================*/
$("#tipoMovimiento").change(function() {
    var tipoMovimiento = $(this).val();
    if (tipoMovimiento === "001") {
        $(".proveedor-group").show();
        $("#seleccionarProveedor").attr("required", true);
    } else {
        $(".proveedor-group").hide();
        $("#seleccionarProveedor").removeAttr("required");
    }
});

/*=============================================
RANGO DE FECHAS PARA STOCK
=============================================*/

$('#daterange-stock-btn').daterangepicker(
  {
    ranges   : {
      'Hoy'           : [moment(), moment()],
      'Ayer'          : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
      'Últimos 7 días': [moment().subtract(6, 'days'), moment()],
      'Últimos 30 días': [moment().subtract(29, 'days'), moment()],
      'Este mes'      : [moment().startOf('month'), moment().endOf('month')],
      'Último mes'    : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
    },
    startDate: moment(),
    endDate  : moment()
  },
  function (start, end) {
    var fechaInicial = start.format('YYYY-MM-DD');
    var fechaFinal = end.format('YYYY-MM-DD');
    var capturarRango = start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY');

    $("#daterange-stock-btn span").html(capturarRango);
    localStorage.setItem("capturarRango", capturarRango);

    // Redirigir a la vista correcta
    window.location = "index.php?ruta=admin-stock&fechaInicial=" + fechaInicial + "&fechaFinal=" + fechaFinal;
  }
);

/*=============================================
CANCELAR RANGO DE FECHAS
=============================================*/
$(document).on("click", ".daterangepicker.opensleft .range_inputs .cancelBtn", function(){
  localStorage.removeItem("capturarRango");
  localStorage.clear();
  window.location = "index.php?ruta=admin-stock";
});

/*=============================================
CAPTURAR "HOY"
=============================================*/
$(".daterangepicker.opensright .ranges li").on("click", function(){

	var textoHoy = $(this).attr("data-range-key");

	if(textoHoy == "Hoy"){

    var d = new Date();
    
    var dia = d.getDate();
    var mes = d.getMonth()+1;
    var año = d.getFullYear();

    if(mes < 10){

      var fechaInicial = año+"-0"+mes+"-"+dia;
      var fechaFinal = año+"-0"+mes+"-"+dia;

    }else if(dia < 10){

      var fechaInicial = año+"-"+mes+"-0"+dia;
      var fechaFinal = año+"-"+mes+"-0"+dia;

    }else if(mes < 10 && dia < 10){

      var fechaInicial = año+"-0"+mes+"-0"+dia;
      var fechaFinal = año+"-0"+mes+"-0"+dia;

    }else{

      var fechaInicial = año+"-"+mes+"-"+dia;
        var fechaFinal = año+"-"+mes+"-"+dia;

    } 

    	localStorage.setItem("capturarRango2", "Hoy");

    	window.location = "index.php?ruta=admin-stock&fechaInicial="+fechaInicial+"&fechaFinal="+fechaFinal;

	}

})

/*=============================================
FILTRO POR PROVEEDOR
=============================================*/
$("#filtroProveedor").change(function() {
    const url = new URL(window.location.href);
    const proveedor = $(this).val();

    // Conservar otros parámetros
    if (proveedor !== "") {
        url.searchParams.set("idProveedor", proveedor);
    } else {
        url.searchParams.delete("idProveedor");
    }

    url.searchParams.set("ruta", "admin-stock");

    window.location.href = url.toString();
});

/*=============================================
FILTRO POR TIPO DE OPERACIÓN
=============================================*/
$("#filtroTipoOperacion").change(function() {
    const url = new URL(window.location.href);
    const operacion = $(this).val();

    if (operacion !== "") {
        url.searchParams.set("codigoTipoOperacion", operacion);
    } else {
        url.searchParams.delete("codigoTipoOperacion");
    }

    url.searchParams.set("ruta", "admin-stock");

    window.location.href = url.toString();
});
