var tablaProductos, tablaProveedores, tablaMovimientos;

function init() {
    listarProductos();
    listarProveedores();
    listarMovimientos();
    cargarAlertas();

    $("#formProducto").on("submit", function (e) {
        guardarProducto(e);
    });

    $("#formProveedor").on("submit", function (e) {
        guardarProveedor(e);
    });

    $("#formMovimiento").on("submit", function (e) {
        guardarMovimiento(e);
    });

    cargarCategorias();
    cargarProveedores();

    // Autocomplete para buscar productos
    $("#buscar_producto").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "../ajax/inventario.php?op=buscar",
                type: "POST",
                data: { criterio: request.term },
                dataType: "json",
                success: function (data) {
                    response($.map(data, function (item) {
                        return {
                            label: item.codigo + " - " + item.nombre,
                            value: item.nombre,
                            idproducto: item.idproducto,
                            codigo: item.codigo,
                            stock: item.stock_actual,
                            precio: item.precio_venta
                        };
                    }));
                }
            });
        },
        minLength: 2,
        select: function (event, ui) {
            $("#idproducto_mov").val(ui.item.idproducto);
            $("#producto_seleccionado").html(
                '<span class="label label-info">' + ui.item.codigo + ' - ' + ui.item.value +
                ' (Stock: ' + ui.item.stock + ')</span>'
            );
            $("#precio_unitario").val(ui.item.precio);
        }
    });
}

// ============ PRODUCTOS ============
function cargarCategorias() {
    $.post("../ajax/inventario.php?op=selectCategoria", function (r) {
        $("#idcategoria").html(r);
    });
}

function cargarProveedores() {
    $.post("../ajax/inventario.php?op=selectProveedor", function (r) {
        $("#idproveedor").html(r);
    });
}

function mostrarFormProducto(flag) {
    if (flag) {
        limpiarFormProducto();
        $("#formularioProducto").show();
        $("#tablaProductos").hide();
        $("#btnagregar").hide();
    } else {
        $("#formularioProducto").hide();
        $("#tablaProductos").show();
        $("#btnagregar").show();
    }
}

function cancelarFormProducto() {
    mostrarFormProducto(false);
}

function limpiarFormProducto() {
    $("#formProducto")[0].reset();
    $("#idproducto").val("");
}

function listarProductos() {
    tablaProductos = $('#tblProductos').DataTable({
        "destroy": true,
        "ajax": {
            url: '../ajax/inventario.php?op=listar',
            type: "get",
            dataType: "json"
        },
        "columns": [
            { "data": "0" },
            { "data": "1" },
            { "data": "2" },
            { "data": "3" },
            { "data": "5" },
            { "data": "7" },
            { "data": "6" }
        ],
        "language": {
            "url": "../public/datatables/Spanish.json"
        }
    });
}

function guardarProducto(e) {
    e.preventDefault();
    var formData = new FormData($("#formProducto")[0]);

    $.ajax({
        url: "../ajax/inventario.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
            try {
                var response = JSON.parse(datos);
                bootbox.alert(response.message);
                if (response.status === "success") {
                    mostrarFormProducto(false);
                    tablaProductos.ajax.reload();
                    cargarProveedores();
                }
            } catch (e) {
                bootbox.alert(datos);
                mostrarFormProducto(false);
                tablaProductos.ajax.reload();
            }
        }
    });
}

function mostrarProducto(idproducto) {
    $.post("../ajax/inventario.php?op=mostrar", { idproducto: idproducto }, function (data) {
        data = JSON.parse(data);
        mostrarFormProducto(true);
        $("#idproducto").val(data.idproducto);
        $("#codigo").val(data.codigo);
        $("#nombre").val(data.nombre);
        $("#idcategoria").val(data.idcategoria);
        $("#tipo_producto").val(data.tipo_producto);
        $("#stock_actual").val(data.stock_actual);
        $("#stock_minimo").val(data.stock_minimo);
        $("#precio_compra").val(data.precio_compra);
        $("#precio_venta").val(data.precio_venta);
        $("#ubicacion").val(data.ubicacion);
        $("#idproveedor").val(data.idproveedor);
        $("#unidad_medida").val(data.unidad_medida);
        $("#lote").val(data.lote);
        $("#fecha_vencimiento").val(data.fecha_vencimiento);
    });
}

function desactivarProducto(idproducto) {
    bootbox.confirm("¿Desactivar este producto?", function (result) {
        if (result) {
            $.post("../ajax/inventario.php?op=desactivar", { idproducto: idproducto }, function (e) {
                bootbox.alert(e);
                tablaProductos.ajax.reload();
            });
        }
    });
}

// ============ PROVEEDORES ============
function mostrarFormProveedor(flag) {
    if (flag) {
        limpiarFormProveedor();
        $("#formularioProveedor").show();
        $("#tablaProveedores").hide();
    } else {
        $("#formularioProveedor").hide();
        $("#tablaProveedores").show();
    }
}

function cancelarFormProveedor() {
    mostrarFormProveedor(false);
}

function limpiarFormProveedor() {
    $("#formProveedor")[0].reset();
    $("#idproveedor_edit").val("");
}

function listarProveedores() {
    tablaProveedores = $('#tblProveedores').DataTable({
        "destroy": true,
        "ajax": {
            url: '../ajax/inventario.php?op=listarProveedores',
            type: "get",
            dataType: "json"
        },
        "language": {
            "url": "../public/datatables/Spanish.json"
        }
    });
}

function guardarProveedor(e) {
    e.preventDefault();
    var formData = new FormData($("#formProveedor")[0]);

    $.ajax({
        url: "../ajax/inventario.php?op=guardarProveedor",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
            bootbox.alert(datos);
            mostrarFormProveedor(false);
            tablaProveedores.ajax.reload();
            cargarProveedores();
        }
    });
}

// ============ MOVIMIENTOS ============
function nuevoMovimiento(tipo) {
    limpiarFormMovimiento();
    $("#tipo_movimiento").val(tipo);
    if (tipo === 'ENTRADA') {
        $("#tituloMovimiento").html('<i class="fa fa-arrow-down"></i> Nueva Entrada (Compra)');
    } else {
        $("#tituloMovimiento").html('<i class="fa fa-arrow-up"></i> Nueva Salida (Uso Interno)');
    }
    $("#formularioMovimiento").show();
    $("#tablaMovimientos").hide();
}

function cancelarFormMovimiento() {
    $("#formularioMovimiento").hide();
    $("#tablaMovimientos").show();
}

function limpiarFormMovimiento() {
    $("#formMovimiento")[0].reset();
    $("#producto_seleccionado").html("");
    $("#buscar_producto").val("");
}

function listarMovimientos() {
    tablaMovimientos = $('#tblMovimientos').DataTable({
        "destroy": true,
        "ajax": {
            url: '../ajax/inventario.php?op=listarMovimientos',
            type: "get",
            dataType: "json"
        },
        "order": [[0, "desc"]],
        "language": {
            "url": "../public/datatables/Spanish.json"
        }
    });
}

function guardarMovimiento(e) {
    e.preventDefault();

    var idproducto = $("#idproducto_mov").val();
    var cantidad = $("#cantidad").val();
    var tipo = $("#tipo_movimiento").val();
    var precio = $("#precio_unitario").val();
    var obs = $("#observaciones_mov").val();
    var idusuario = $("#idusuario").val();

    if (!idproducto) {
        bootbox.alert("Debe seleccionar un producto");
        return;
    }

    $.ajax({
        url: "../ajax/inventario.php?op=guardarMovimiento",
        type: "POST",
        data: {
            idproducto: idproducto,
            cantidad: cantidad,
            tipo_movimiento: tipo,
            precio_unitario: precio,
            observaciones: obs,
            idusuario: idusuario
        },
        success: function (datos) {
            try {
                var response = JSON.parse(datos);
                bootbox.alert(response.message);
                if (response.status === "success") {
                    cancelarFormMovimiento();
                    tablaMovimientos.ajax.reload();
                    tablaProductos.ajax.reload();
                    cargarAlertas();
                }
            } catch (e) {
                bootbox.alert(datos);
            }
        }
    });
}

// ============ ALERTAS ============
function cargarAlertas() {
    // Stock Bajo
    $.post("../ajax/inventario.php?op=listarStockBajo", function (data) {
        var alertas = JSON.parse(data);
        var html = "";
        if (alertas.length > 0) {
            alertas.forEach(function (item) {
                html += "<tr>";
                html += "<td>" + item[1] + "</td>";
                html += "<td><span class='label label-danger'>" + item[3] + "</span></td>";
                html += "<td>" + item[4] + "</td>";
                html += "</tr>";
            });
        } else {
            html = "<tr><td colspan='3' class='text-center'>No hay productos con stock bajo</td></tr>";
        }
        $("#tblStockBajo tbody").html(html);
    });

    // Próximos a Vencer
    $.post("../ajax/inventario.php?op=listarProximosVencer", function (data) {
        var alertas = JSON.parse(data);
        var html = "";
        if (alertas.length > 0) {
            alertas.forEach(function (item) {
                html += "<tr>";
                html += "<td>" + item[1] + "</td>";
                html += "<td>" + item[3] + "</td>";
                html += "<td>" + item[4] + "</td>";
                html += "</tr>";
            });
        } else {
            html = "<tr><td colspan='3' class='text-center'>No hay productos próximos a vencer</td></tr>";
        }
        $("#tblProximosVencer tbody").html(html);
    });
}

// Recargar alertas al cambiar a la pestaña
$('a[href="#alertas"]').on('shown.bs.tab', function (e) {
    cargarAlertas();
});

init();
