$('#tutorial').on('click', function () {
    $(document).ready(async function () {
        const driver = new Driver({
            doneBtnText: 'Sair',
            closeBtnText: 'Fechar',
            nextBtnText: 'Próximo',
            prevBtnText: 'Anterior',
            allowClose: false,
            animate: true,
        });
        driver.defineSteps([{
            element: '#campostour',
            popover: {
                title: 'Dados Gerais',
                description: 'Aqui estão os campos disponíveis para realizar a movimentação.',
                position: 'top'
            }
        },
        {
            element: '#txtDocumento',
            popover: {
                title: 'Campos Obrigatórios',
                description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
                position: 'top'
            }
        },
        {
            element: '#txtTipoSaida',
            popover: {
                title: 'Campos Obrigatórios',
                description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
                position: 'top'
            }
        },
        {
            element: '#txtQualidade',
            popover: {
                title: 'Campos Obrigatórios',
                description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
                position: 'top'
            }
        },
        {
            element: '#txtDeposito',
            popover: {
                title: 'Campos Obrigatórios',
                description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
                position: 'top'
            }
        },
        {
            element: '#txtProduto',
            popover: {
                title: 'Campos Obrigatórios',
                description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
                position: 'top'
            }
        },
        {
            element: '#txtCor',
            popover: {
                title: 'Campos Obrigatórios',
                description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
                position: 'top'
            }
        },
        {
            element: '#confirmar_mov',
            popover: {
                title: 'Botão Gravar',
                description: 'Clique aqui para gravar a movimentação.',
                position: 'left'
            }
        }
        ]);
        driver.start();
    });
});

$(document).ready(async function () {

    $('#txtVendaConferencia').autocompleta(1, `JSON={ "tabela":"VENDA", "camposSelect":["CODVEN CHAVE, CODCLI DESCRICAO"], "where": [] }`, [], [], []);
    $('#btnVendaConferencia').pesquisa_array(['#txtVendaConferencia'], ['CODVEN'], ['CODCLI'], '/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"VENDA", "camposSelect":[ "CODVEN", "CODCLI" ], "where": null}', 'Pesquisa Venda', 'VENDA');
    $('#btnAVendaConferencia').on('click', function () {
        $('#txtVendaConferencia').val('');
    });

    $('#txtClienteConferencia').autocompleta(3, `JSON={ "tabela":"ENTIDADE", "camposSelect":["CODCLI CHAVE, NOME DESCRICAO"], "where": [] }`, [], [], []);
    $('#btnClienteConferencia').pesquisa_array(['#txtClienteConferencia'], ['CODCLI'], ['NOME'], '/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"ENTIDADE", "camposSelect":[ "codCli", "nome" ], "where": null}', 'Pesquisa Cliente', 'ENTIDADE');
    $('#btnAClienteConferencia').on('click', function () {
        $('#txtClienteConferencia').val('');
    });

    $('#txtProdutoConferencia').autocompleta(3, `JSON={ "tabela":"PRODUTO", "camposSelect":["CODIGO CHAVE, descricao"], "where": [] }`, [], [], []);
    $('#btnProdutoConferencia').pesquisa_array(['#txtProdutoConferencia'], ['CODIGO'], ['DESCRICAO'], `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"PRODUTO", "camposSelect":[ "CODIGO", "DESCRICAO" ], "where": null}`, 'Pesquisa Produto', 'PRODUTO');
    $('#btnAProdutoConferencia').on('click', function () {
        $('#txtProdutoConferencia').val('');
    });

    $('#txtCorConferencia').autocompleta(1, `JSON={ "tabela":"CADCOR", "camposSelect":["COR CHAVE, descricao"], "where": [] }`, [], [], []);
    $('#btnCorConferencia').pesquisa_array(['#txtCorConferencia'], ['COR'], ['DESCRICAO'], `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CADCOR", "camposSelect":[ "COR", "DESCRICAO" ], "where": null}`, 'Pesquisa Cor', 'CADCOR');
    $('#btnACorConferencia').on('click', function () {
        $('#txtCorConferencia').val('');
    });

    $('#txtTamanhoConferencia').autocompleta(1, `JSON={ "tabela":"TABTAM", "camposSelect":["TAM CHAVE, FAIXA DESCRICAO"], "where": [] }`, [], [], []);
    $('#btnTamanhoConferencia').pesquisa_array(['#txtTamanhoConferencia'], ['TAM'], ['FAIXA'], `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"TABTAM", "camposSelect":[ "TAM", "FAIXA" ], "where": null}`, 'Pesquisa Tamanho', 'TABTAM');
    $('#btnATamanhoConferencia').on('click', function () {
        $('#txtTamanhoConferencia').val('');
    });

    $('#tabelaImportacao').DataTable({
        paging: false,
        filter: false,
        info: false,
        order: false,
        autoWidth: true,
        scrollY: "320px",
        destroy: true,
        "language": {
            "sEmptyTable": "Nenhum registro encontrado",
            "sInfo": "_TOTAL_ registros",
            "sInfoEmpty": " 0 registros",
            "sInfoFiltered": "(Filtrados de _MAX_ registros)",
            "sInfoPostFix": "",
            "sInfoThousands": ".",
            "sLengthMenu": "_MENU_ resultados",
            "sLoadingRecords": "Carregando...",
            "sProcessing": "Processando...",
            "sZeroRecords": "Nenhum registro encontrado",
            "sSearch": "Pesquisar",
            "oPaginate": {
                "sNext": "Próximo",
                "sPrevious": "Anterior",
                "sFirst": "Primeiro",
                "sLast": "Último"
            },
            "oAria": {
                "sSortAscending": ": Ordenar colunas de forma ascendente",
                "sSortDescending": ": Ordenar colunas de forma descendente"
            }
        }
    });

    $('#msform').validate({
        rules: {
            txtDocumento: {
                required: true,
            },
            txtLancamento: {
                required: true,
            },
            txtNota: {
                required: true,
            },
            txtEmpresa: {
                required: true,
            },
            txtQualidade: {
                required: true,
            },
            txtDeposito: {
                required: true,
            }
        },
        messages: {
            txtDocumento: {
                required: "Informe um número de documento."
            },
            txtLancamento: {
                required: "Informe um número de lançamento."
            },
            txtNota: {
                required: "Informe uma nota."
            },
            txtEmpresa: {
                required: "Informe uma empresa."
            },
            txtQualidade: {
                required: "Informe uma qualidade."
            },
            txtDeposito: {
                required: "Informe um depósito."
            }
        },
        errorElement: 'span',
        errorPlacement: function (error, element) {
            error.addClass('invalid-feedback');
            element.closest('.form-group').append(error);
        },
        highlight: function (element, errorClass, validClass) {
            $(element).addClass('is-invalid');
        },
        unhighlight: function (element, errorClass, validClass) {
            $(element).removeClass('is-invalid');
        },
        submitHandler: async function (form, event) {

        }
    });

    $('#txtVendaConferencia').on('blur', async function () {
        try {
            $.LoadingOverlay("show");
            try {
                const codVen = pegaChave('#txtVendaConferencia');

                if (codVen == '') {
                    msgErro('Necessário informar código da venda');
                    return;
                }

                let response = await requisicao(
                    "GET",
                    "/Sisplan/Funcoes/v1/pesquisa?",
                    `JSON={ 
                        "tabela":"ITVENDA", 
                        "camposSelect":["ITVENDA.CODIGO", "PRODUTO.DESCRICAO", "ITVENDA.COR", "CADCOR.DESCRICAO DESC_COR", "ITVENDA.TAM", "ITVENDA.QUANTIDADE"], 
                        "leftJoin": [{"tabela": "PRODUTO", "CONDICAO": "PRODUTO.CODIGO = ITVENDA.CODIGO"},
                                     {"tabela": "CADCOR", "CONDICAO": "CADCOR.COR = ITVENDA.COR"}],
                        "where": ["codven = '${codVen}'"]}`,
                    null
                );
                if (!response) {
                    return;
                }
                let jsonStr = await response.json();
                if (response.status != 200) {
                    msgErro(jsonStr.RESULT[0].mensagem);
                    return;
                }

                for (let i = 0; i < jsonStr.RESULT[0].length; i++) {
                    const element = jsonStr.RESULT[0][i];
                    $('#tabelaImportacao').DataTable().row.add(
                        [element.CODIGO, element.DESCRICAO, element.COR, element.DESC_COR, element.TAM, element.QUANTIDADE]
                    ).draw(false);
                }

            } catch (error) {
                console.error(error);
                msgErro(`Não foi possível buscar os dados da empresa: ${error}`);
            }
        } finally {
            $.LoadingOverlay("hide");
        }
    })

    $("#btnImportar").click(async function () {
        let lancamento = $('#txtLancamento').val();
        let documento = $('#txtDocumento').val();
        let nf = $('#txtNota').val();
        let empnf = pegaChave('#txtEmpresa');
        let deposito = pegaChave('#txtDeposito');
        let qualidade = pegaChave('#txtQualidade');

        let _url = `/sisplan/CANCELARVENDA?`;
        let _params = `TIPO=P&NOTA=${nf}&EMPNOTA=${empnf}&DOCUMENTO=${documento}&DEPOSITO=${deposito}&QUALIDADE=${qualidade}&IMPORTADO=1&LANCAMENTO=${lancamento}`;

        try {
            let response = await requisicao('GET', _url, _params, null);

            if (!response) {
                return '';
            }

            var jsonStr = await response.json();
            if (response.status != 200) {
                msgErro(jsonStr.mensagem);
                return '';
            }
            $.LoadingOverlay("hide");
            toastr.success(
                `Importação efetuada com sucesso!`,
                'Confirmação', {
                toastClass: 'alert',
                iconClasses: {
                    error: 'alert-error',
                    info: 'alert-info',
                    success: 'alert-success',
                    warning: 'alert-warning'
                },
                positionClass: "toast-top-center",
                progressBar: true,
                timeOut: 5000,
                fadeOut: 3000,
                onHidden() {
                    window.location.reload();
                }
            }
            ).css({
                "margin-top": "20%",
                "width": "500px",
                "max-width": "500px"
            });
        } catch (error) {
            console.error(error);
        }
    });

    $("#btnConsultar").click(async function () {
        if ($("#msform").validate().form()) {
            $.LoadingOverlay('show');
            let lancamento = $('#txtLancamento').val();
            let documento = $('#txtDocumento').val();
            let nf = $('#txtNota').val();
            let empnf = pegaChave('#txtEmpresa');
            let deposito = pegaChave('#txtDeposito');
            let qualidade = pegaChave('#txtQualidade');

            let _url = `/sisplan/Replicacao/v1/solicitamov?`;
            let _params = `TIPO=P&NOTA=${nf}&EMPNOTA=${empnf}&DOCUMENTO=${documento}&DEPOSITO=${deposito}&QUALIDADE=${qualidade}&IMPORTADO=0&LANCAMENTO=${lancamento}`;

            try {
                let response = await requisicao('GET', _url, _params, null, 300000);

                if (!response) {
                    return '';
                }

                var jsonStr = await response.json();
                if (response.status != 200) {
                    msgErro(jsonStr.mensagem);
                    return '';
                }
                await retornaMovimentacao(jsonStr.CODIGO);
            } catch (error) {
                $.LoadingOverlay('hide');
                console.error(error);
            }
        }
    });

    var contador = 0;
    var nrmovimentacao = 0;

    async function retornaMovimentacao(nrMov) {
        _url = `/sisplan/replicacao/v1/visualizamov?`;
        _params = `NRCONTROLE=${nrMov}`;

        try {
            response = await requisicao('GET', _url, _params, null);

            if (!response) {
                return '';
            }

            jsonStr = await response.json();
            if (response.status != 200) {
                msgErro(jsonStr.mensagem);
                return '';
            }
            if (jsonStr.length > 0) {
                await preencheTabela(jsonStr[0].FDBS.Manager.TableList[0].RowList);
            } else {
                if (contador < 100) {
                    if (contador == 0) {
                        nrmovimentacao = nrMov;
                    }
                    await setTimeout(async function () { await retornaMovimentacao(nrmovimentacao) }, 3000);
                    contador += 1;
                } else {
                    msgAlerta('Arquivo não encontrado.');
                    $('#btnImportar').addClass('d-none');
                    $('#btnConsultar').removeClass('d-none');
                    $('#txtLancamento').attr('disabled', false);
                    $('#txtDocumento').attr('disabled', false);
                    $('#txtNota').attr('disabled', false);
                    $('#txtEmpresa').attr('disabled', false);
                    $('#btnEmpresa').attr('disabled', false);
                    $('#btnAEmpresa').attr('disabled', false);
                    $('#txtDeposito').attr('disabled', false);
                    $('#btnDeposito').attr('disabled', false);
                    $('#txtQualidade').attr('disabled', false);
                    $('#btnQualidade').attr('disabled', false);
                    $('#txtLancamento').attr('disabled', false);
                    $('#txtLancamento').attr('disabled', false);
                    $('#btnLimpaDeposito').attr('disabled', false);
                    $('#btnLimpaQualidade').attr('disabled', false);
                    $.LoadingOverlay('hide');
                    contador = 0;
                    return;
                }
            }
        } catch (error) {
            $.LoadingOverlay('hide');
            console.error(error);
        }
    }

    async function preencheTabela(data) {
        data.forEach(element => {
            element = element.Original;
            $('#tabelaImportacao').DataTable().row.add([element.CODIGO, element.DESCRICAO, element.COR, element.TAMANHO, element.QTDE]).draw(false);
        });
        $('#btnImportar').removeClass('d-none');
        $('#btnConsultar').addClass('d-none');
        $('#txtLancamento').attr('disabled', 'disabled');
        $('#txtDocumento').attr('disabled', 'disabled');
        $('#txtNota').attr('disabled', 'disabled');
        $('#txtEmpresa').attr('disabled', 'disabled');
        $('#btnEmpresa').attr('disabled', 'disabled');
        $('#btnAEmpresa').attr('disabled', 'disabled');
        $('#txtDeposito').attr('disabled', 'disabled');
        $('#btnDeposito').attr('disabled', 'disabled');
        $('#txtQualidade').attr('disabled', 'disabled');
        $('#btnQualidade').attr('disabled', 'disabled');
        $('#txtLancamento').attr('disabled', 'disabled');
        $('#txtLancamento').attr('disabled', 'disabled');
        $('#btnLimpaDeposito').attr('disabled', 'disabled');
        $('#btnLimpaQualidade').attr('disabled', 'disabled');
        $.LoadingOverlay('hide');
    }
});