const { 
    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, 
    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta
} = document.datos;

const formatter = (n, d = 2) => new Intl.NumberFormat('es-MX').format(n);

function FrmAutoRun()
    {
        document.title = "Realizar venta";
        $('#PCOContenedor_placa').hide();
        if($('#id').val()) {
            //$('#add_product').hide();
            $('#PCOContenedor_clientesSubForm').hide();
            $('#id_cliente').val(idClienteDB.value);
            PCOJS_ActualizarComboBox('id_cliente');
            actualizarInforme();
        }
        else {
            $('#finalizar_venta').hide();
            $('#btn_update').hide();
        }
    }

function onchangeCliente(){
    $('#PCOContenedor_placa').hide();
    if($('#id_cliente').val() == 1) {
        $('#PCOContenedor_placa').show();
    }
}

function cargarDatosFE(resp) {

    const { total, iva } = resp;
    total_fake.value = formatter(total).replace('$','');
    iva_fake.value = formatter(iva).replace('$','');
    if(!id.value && resp.id)
        id.value = resp.id;
    actualizarInforme();
}

function agregarProducto() {
    if(validarDatosCompra()) {
        if(!id.value) {
            document.datos.PCO_Accion.value = 'VENTA_agregarProductoCrearOC';
            document.datos.Precarga_EstilosBS.value = 1;
            document.datos.Presentar_FullScreen.value = 0;
            document.datos.target = '_self';
        	document.datos.submit();
        }
        else {
            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,
                'index.php', 'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto' +
                    '&id=' + id.value + 
                    '&id_cliente=' + id_cliente.value +
                    '&id_producto=' + id_producto.value +
                    '&cantidad=' + cantidad.value +
                    '&nombre_completo=' + nombre_completo.value +
                    '&telefono=' + telefono.value +
                    '&numero_documento=' + numero_documento.value
                )
            );
            if(resp.success) {
                cargarDatosFE(resp);
                $('#finalizar_venta').show();
            }
            else {
                PCOJS_MostrarMensaje("Aviso del sistema", resp.msg);
            }
        }
    }
}

function finalizarCompra() {
    if(dinero_entregado.value < total_fake.value) {
        PCOJS_MostrarMensaje("Aviso del sistema", "El valor a pagar es menor al total!");
        return;
    }
    //Actualiza
        /*document.datos.PCO_Accion.value = 'PCO_ActualizarDatosFormulario';
        document.datos.id_registro_datos.value = id.value;
        document.datos.Precarga_EstilosBS.value = 0;
        document.datos.Presentar_FullScreen.value = 1;
    	document.datos.target = '_blank';
    	document.datos.submit();*/
    //Abre la venta para imprimirla
        /*document.datos.PCO_Accion.value = 'VENTA_imprimirFactura';
        document.datos.id_registro_datos.value = id.value;
        document.datos.Precarga_EstilosBS.value = 0;
        document.datos.Presentar_FullScreen.value = 1;
    	document.datos.target = '_blank';
    	document.datos.submit();*/

    document.datos.PCO_Accion.value='PCO_ActualizarDatosFormulario';
    PCOJS_ValidarCamposYProcesarFormulario('datos');
}

function eliminar_producto() {
    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,
        'index.php', 'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto' +
            '&id_venta=' + id.value +
            '&id_venta_detalle=' + document.FRMBASEINFORME.PCO_Valor.value
        )
    );
    cargarDatosFE(resp);
}

function actualizarInforme() {
    $('#informeCompra').html(PCO_ObtenerContenidoAjax(0, 'index.php',
        'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=' + id.value)
    );
}

function validarDatosCompra() {
    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value) {
        PCOJS_MostrarMensaje("Aviso del sistema", "Debes seleccionar o ingresar un cliente!");
        return false;
    }
    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {
        PCOJS_MostrarMensaje("Aviso del sistema", "Debes ingresar una cantidad válida!");
        return false;
    }
    if(!id_producto.value) {
        PCOJS_MostrarMensaje("Aviso del sistema", "Debes seleccionar un producto");
        return false;
    }
    if($('#id_cliente').val() == 1 && !$('#placa').val()) {
        PCOJS_MostrarMensaje("Aviso del sistema", "Debes ingresar una placa");
        return false;
    }
    return true;
}

const convertToInt = (n) => parseInt(n.replace(/,/g, ""));

function calcularDevuelta() {
    devuelta.value = '';
    if(dinero_entregado.value && total_fake.value) {
        dinero_entregado.value = dinero_entregado.value.replace(/\D/g, "")
            .replace(/\B(?=(\d{3})+(?!\d)\.?)/g, ",");
        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);
        //console.log({diff});
        devuelta.value = formatter(diff).replace('$', '');
    }
}
/*
        $(event.target).val(function (index, value ) {
            return value.replace(/\D/g, "")
                        .replace(/([0-9])([0-9]{2})$/, '$1.$2')
                        .replace(/\B(?=(\d{3})+(?!\d)\.?)/g, ",");
*/

const origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado = ""}) => ({
  values: "a, b, c",
  ajax: {
    url: "index.php",
    type: "POST",
    dataType: "json",
    data: {
      q: "{{{q}}}",
      PCO_Accion: "PCO_ObtenerOpcionesAjaxSelect",
      Presentar_FullScreen: "1",
      PCO_TablaConsulta,
      PCO_ListaCamposRetorno,
      PCO_ListaCamposBusqueda,
      PCO_CondicionFiltrado
    }
  },
  minLength: 2,
  locale: {
    emptyTitle: "Seleccione y digite para buscar",
    statusInitialized: "Empiece a digitar para recuperar registros",
    statusSearching: "Cargando...",
    currentlySelected: "Actualmente seleccionado(s):",
    errorText: "No se pueden recuperar registros",
    statusTooShort: "Ingrese al menos tres caracteres",
    statusNoResults: "No se encuentran resultados",
    searchPlaceholder: "Buscar..."
  },
  log: 0,
  preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({
    text,
    value,
    data: {
      subtext,
      icon,
    }
    })) : []
});

$(document).ready(() => {
    const filtradoProductos = "";// $('#tipo_producto').val() == 2 ? " AND inventario>0" : "";
    $("#id_producto").selectpicker().ajaxSelectPicker(origenListaOpciones({ 
        PCO_TablaConsulta: "app_productos",
        PCO_ListaCamposRetorno: "id,CONCAT(app_productos.codigo," | ",app_productos.nombre," | ",app_productos.precio_venta)",
        PCO_ListaCamposBusqueda: "codigo,nombre",
        // PCO_CondicionFiltrado: "tipo_producto="+$('#tipo_venta').val()+filtradoProductos,
    }));
    $("#id_producto").trigger("change");
}); 