$("#tutorial").on("click", function () {
    $(document).ready(async function () {
        const driver = new Driver({
            doneBtnText: "Sair",
            closeBtnText: "Fechar",
            nextBtnText: "Próximo",
            prevBtnText: "Anterior",
            allowClose: false,
        });
        driver.defineSteps([
            {
                element: "#btnFiltros",
                popover: {
                    title: "Botão Filtros",
                    description: "Clique aqui para filtrar a consulta.",
                    position: "right",
                },
            },
            {
                element: "#btnNovaOrdemProducao",
                popover: {
                    title: "Botão Incluir",
                    description: "Clique aqui para incluir uma nova ordem de produção.",
                    position: "right",
                },
            },
            {
                element: "#tabelaOs",
                popover: {
                    title: "Tabela Ordem de Produção Simples",
                    description: "Aqui estão os dados das ordens de produção cadastradas.",
                    position: "top",
                },
            },
        ]);
        driver.start();
    });
});

$(document).ready(async function () {
    let tipoCodigo = 'P';

    let queryString = window.location.href;
    let parametros = queryString.split("/");
    let sequencia = parametros[parametros.length - 1];
    let arrayComissoes = [];
    const permissaoUsuarioLogado = await permissaoAcessos("CADCOMISSAO");
    aplicaMascara()

    $("#txtProduto").autocompleta(3, `JSON={ "tabela":"PRODUTO", "camposSelect":["CODIGO CHAVE, DESCRICAO DESCRICAO"], "where": ["1 = 1"] }`);
    $("#btnProduto").pesquisa_serverside(["#txtProduto"], ["CODIGO"], ["DESCRICAO"], `{"tabela":"PRODUTO", "camposSelect":[ "CODIGO", "DESCRICAO" ], "where": ["1 = 1"]}`, "Pesquisa Produto");
    $("#btnLimpaProduto").on("click", function () { $("#txtProduto").val(""); });

    $("#txtTabPreco").autocompleta(1, `JSON={ "tabela":"REGIAO", "camposSelect":["REGIAO CHAVE, DESCRICAO DESCRICAO"], "where": null }`);
    $("#btnTabPreco").pesquisa_serverside(["#txtTabPreco"], ["REGIAO"], ["DESCRICAO"], `{"tabela":"REGIAO", "camposSelect":[ "REGIAO", "DESCRICAO" ], "where": null}`, "Pesquisa Tabela de Preço");
    $("#btnLimpaTabPreco").on("click", function () { $("#txtTabPreco").val(""); });

    $("#txtMaterial").autocompleta(1, `JSON={ "tabela":"MATERIAL", "camposSelect":["CODIGO CHAVE, DESCRICAO DESCRICAO"], "where": null }`);
    $("#btnMaterial").pesquisa_serverside(["#txtMaterial"], ["CODIGO"], ["DESCRICAO"], `{"tabela":"MATERIAL", "camposSelect":[ "CODIGO", "DESCRICAO" ], "where": null}`, "Pesquisa Material");
    $("#btnLimpaMaterial").on("click", function () { $("#txtMaterial").val(""); });

    $("#txtRepresentante").autocompleta(1, `JSON={ "tabela":"REPRESEN", "camposSelect":["CODREP CHAVE, NOME DESCRICAO"], "where": null }`);
    $("#btnRepresentante").pesquisa_serverside(["#txtRepresentante"], ["CODREP"], ["NOME"], `{"tabela":"REPRESEN", "camposSelect":[ "CODREP", "NOME" ], "where": null}`, "Pesquisa Representante");
    $("#btnLimpaRepresentante").on("click", function () { $("#txtRepresentante").val(""); });

    if (sequencia == 'create') {
        const ordem = await RetornaProximo('GRUPO_COMISSAO', 'GRUPO_COMISSAO', 'SEQ', 5);
        $('#txtOrdem').val(ordem);
    } else {
        $('#txtOrdem').val(sequencia);
        $('#txtOrdem').prop('disabled', true);
    };


    $('#txtOrdem').on('blur', async function () {
        const valor = $('#txtOrdem').val();

        if (valor == '') {
            $('#txtOrdem').val(`${await RetornaProximo('GRUPO_COMISSAO', 'GRUPO_COMISSAO', 'SEQ', 5)}`)
        }
    });

    $('#rdProduto').on('click', function () {
        $('#ProdutoInfoTour').removeClass('d-none');
        $('#MaterialInfoTour').addClass('d-none');
        $('#txtMaterial').val('');
        tipoCodigo = 'P'
    });

    $('#rdMaterial').on('click', function () {
        $('#ProdutoInfoTour').addClass('d-none');
        $('#MaterialInfoTour').removeClass('d-none');
        $('#txtProduto').val('');
        tipoCodigo = 'M'
    });

    $('#btnExcluir').on('click', async function () {
        const dadosComissoes = $('#tabelaComissoesCadastro').DataTable().data().toArray();

        if (dadosComissoes.length <= 0) {
            msgAlerta('Sem registros para excluir! Por favor, verifique.');
            return
        };

        msgAguardaConfirmacao('Tem certeza que deseja excluir todas as comissões dessa sequência?', async () => {
            $('#tabelaComissoesCadastro').DataTable().clear().draw();
            arrayComissoes = [];
            await deletaSequenciaComissoes(sequencia);
        }, () => { })
    });

    $('#btnVoltar').on('click', async function () {
        window.location.href = `${BASE_URI}/comissao`;
    });

    $('#btnGravar').on('click', async function () {
        $.LoadingOverlay('show');
        try {
            const dadosComissoes = $('#tabelaComissoesCadastro').DataTable().data().toArray();

            if (sequencia != 'create') {
                if (dadosComissoes.length <= 0) {
                    msgAguardaConfirmacao('Se gravar a sequência vazia sem comissões, ela vai ser excluída, tem certeza que deseja fazer isso?',
                        async () => {
                            if (permissaoUsuarioLogado.EXCLUI == 'S') {
                                await deletaSequenciaComissoes($('#txtOrdem').val());
                            } else {
                                msgAlerta('Você não tem permissão pra excluir essa sequência de comissões')
                            };
                        },
                        () => { });
                    return;
                }
            } else {
                if (dadosComissoes.length <= 0) {
                    msgAlerta('Não existe registros para gravar. Por favor, verifique!');
                    return
                }
            }

            let registros = [];

            for (x in dadosComissoes) {
                let registroComissao = {
                    SEQUENCIA: dadosComissoes[x].SEQUENCIA,
                    CODIGO: dadosComissoes[x].CODIGO,
                    DESCDE: dadosComissoes[x].DESC_DE,
                    DESCATE: dadosComissoes[x].DESC_ATE,
                    COMISSAO: dadosComissoes[x].COMISSAO,
                    TIPO: dadosComissoes[x].TIPO,
                    CODREP: dadosComissoes[x].REPRESENTANTE,
                    TABPRECO: dadosComissoes[x].TAB_PRE,
                    DESCONTO: '0'
                }

                registros.push(registroComissao);
            };

            const response = await requisicao('POST', '/sisplan/cadcomissao/v1/cadastracomissoes?', '', `LISTACOMISSOES=${encodeURIComponent(JSON.stringify({ COMISSOES: registros }))}`, 90000);

            if (!response) {
                $.LoadingOverlay('hide');
                return;
            }

            if (response.status != 200) {
                const jsonStr = await response.json();
                $.LoadingOverlay('hide');
                msgErro(jsonStr.mensagem);
                return;
            }

            $.LoadingOverlay('hide');

            criaMensagemSucesso(`Sequência ${registros[0].SEQUENCIA} de comissões gravada com sucesso.`, () => { window.location.href = `${BASE_URI}/comissao`; });
        } catch (error) {
            console.error(error);
            $.LoadingOverlay('hide');
            msgErro(`Não foi possível gravar as comissões! Erro: ${error}. Verifique e tente novamente.`);
            return;
        } finally {
            $.LoadingOverlay('hide');
        }
    })

    $('#btnAdicionar').on('click', async function () {
        $.LoadingOverlay('show');
        try {
            if ($('#tabelaComissoesCadastro').DataTable().data().toArray().length > 0) {
                const confirmado = await msgAguardaConfirmacao(
                    'Ao confirmar, as comissões desta lista serão excluídas e substituídas pelas novas comissões informadas. Deseja continuar?',
                    async () => true,
                    async () => false
                );

                if (!confirmado) return;
            }

            $('#tabelaComissoesCadastro').DataTable().clear().draw();

            const ordem = $('#txtOrdem').val();
            const codigo = tipoCodigo == 'M' ? pegaChave('#txtMaterial') : pegaChave('#txtProduto');
            const descCodigo = tipoCodigo == 'M' ? pegaDescricao('#txtMaterial') : pegaDescricao('#txtProduto');
            const tabPreco = pegaChave('#txtTabPreco');
            const descTabPreco = pegaDescricao('#txtTabPreco');
            const codRep = pegaChave('#txtRepresentante');
            const nomeRep = pegaDescricao('#txtRepresentante');

            if (ordem == '') {
                msgAlerta('Não é possível adicionar comissões sem ordem informada! Favor clicar no campo e em seguida fora dele para gerar um número de ordem.');
                $.LoadingOverlay('hide');
                return;
            }

            const valores = [];
            const comissoes = [];
            for (let i = 1; i <= 15; i++) {
                const valor = parseFloat(($(`#txtValor${String(i).padStart(2, '0')}`).val()));
                const comissao = parseFloat(($(`#txtCom${String(i).padStart(2, '0')}`).val()));
                if (valor > 0 || comissao > 0) {
                    valores.push(valor);
                    comissoes.push(comissao);
                }
            }

            for (let i = 1; i < valores.length; i++) {
                if (valores[i] <= valores[i - 1]) {
                    msgAlerta(`Valor ${String(i + 1).padStart(2, '0')} deve ser maior que o Valor ${String(i).padStart(2, '0')}! Por favor, verifique.`);
                    $.LoadingOverlay('hide');
                    return;
                }
            }

            const index = arrayComissoes.findIndex(comissao => comissao.codigo == codigo
                && comissao.codRep == codRep
                && comissao.tabPreco == tabPreco);

            if (index != -1) {
                msgAlerta('Comissão já adicionada! Por favor, verifique.');
                $.LoadingOverlay('hide');
                return;
            } else {
                arrayComissoes.push({
                    codigo,
                    codRep,
                    tabPreco
                });
            }

            for (let i = 0; i < valores.length; i++) {
                const com = {
                    SEQUENCIA: ordem,
                    CODIGO: codigo,
                    DESC_ITEN: descCodigo,
                    DESC_DE: valores[i],
                    DESC_ATE: i + 1 < valores.length ? (valores[i + 1] - 0.01) : 99999.99,
                    COMISSAO: comissoes[i],
                    TIPO: tipoCodigo,
                    REPRESENTANTE: codRep,
                    NOME_REP: nomeRep,
                    TAB_PRE: tabPreco,
                    DESC_TABPRECO: descTabPreco,
                    DESCONTO: 0
                };

                $('#tabelaComissoesCadastro').DataTable().row.add(com).draw(false);
            }

            $('#txtTabPreco, #txtProduto, #txtMaterial, #txtRepresentante').val('');
            for (let i = 1; i <= 15; i++) {
                $(`#txtValor${String(i).padStart(2, '0')}, #txtCom${String(i).padStart(2, '0')}`).val('');
            }

        } catch (error) {
            console.error(error);
            msgAlerta('Não foi possível adicionar comissões. Por favor, verifique.');
        } finally {
            $.LoadingOverlay('hide');
            if ($('#txtOrdem').prop('disabled'))
                $('#txtOrdem').prop('disabled', true);
        }
    });

    async function buscaComissoesSeq() {
        $.LoadingOverlay('show');
        try {
            if (sequencia == 'create') {
                $('#tabelaComissoesCadastro').DataTable({
                    destroy: true,
                    ordering: false,
                    lengthChange: false,
                    serverside: false,
                    searching: false,
                    pageLength: 6,
                    "autoWidth": true,
                    "columns": [
                        {
                            "data": "SEQUENCIA"
                        },
                        {
                            "data": "CODIGO"
                        },
                        {
                            "data": "DESC_ITEN"
                        },
                        {
                            "data": "DESC_DE"
                        },
                        {
                            "data": "DESC_ATE"
                        },
                        {
                            "data": "COMISSAO"
                        },
                        {
                            "data": "TIPO"
                        },
                        {
                            "data": "REPRESENTANTE"
                        },
                        {
                            "data": "NOME_REP"
                        },
                        {
                            "data": "TAB_PRE"
                        },
                        {
                            "data": "DESC_TABPRECO"
                        },
                        {
                            "data": "DESCONTO"
                        }
                    ],
                    "columnDefs": [
                        {
                            render(data) {
                                return parseFloat(data).toLocaleString("pt-BR", {
                                    maximumFractionDigits: 2,
                                    minimumFractionDigits: 2
                                });
                            },
                            targets: [3, 4],
                            "className": 'pr-2 text-right'
                        }
                    ]
                });

                return
            }

            const url = `/sisplan/cadcomissao/v1/consultacomissoesedicao?`;

            const response = await requisicao("GET", url, `SEQUENCIA=${sequencia}`, '', 90000);

            const json = await response.json();

            if (json.length == 0) {
                $('#tabelaComissoesCadastro').DataTable({
                    destroy: true,
                    ordering: false,
                    lengthChange: false,
                    serverside: false,
                    searching: false,
                    pageLength: 6,
                    "autoWidth": true,
                    "columns": [
                        {
                            "data": "SEQUENCIA"
                        },
                        {
                            "data": "CODIGO"
                        },
                        {
                            "data": "DESC_ITEN"
                        },
                        {
                            "data": "DESC_DE"
                        },
                        {
                            "data": "DESC_ATE"
                        },
                        {
                            "data": "COMISSAO"
                        },
                        {
                            "data": "TIPO"
                        },
                        {
                            "data": "REPRESENTANTE"
                        },
                        {
                            "data": "NOME_REP"
                        },
                        {
                            "data": "TAB_PRE"
                        },
                        {
                            "data": "DESC_TABPRECO"
                        },
                        {
                            "data": "DESCONTO"
                        }
                    ],
                    "columnDefs": [
                        {
                            render(data) {
                                return parseFloat(data).toLocaleString("pt-BR", {
                                    maximumFractionDigits: 2,
                                    minimumFractionDigits: 2
                                });
                            },
                            targets: [3, 4],
                            "className": 'pr-2 text-right'
                        }
                    ]
                });
                return;
            }

            if (response.status != 200) {
                msgAlerta(json.mensagem);
                return;
            }

            $('#tabelaComissoesCadastro').DataTable({
                destroy: true,
                ordering: false,
                lengthChange: false,
                serverside: false,
                searching: false,
                "autoWidth": true,
                "data": json,
                "columns": [
                    {
                        "data": "SEQUENCIA"
                    },
                    {
                        "data": "CODIGO"
                    },
                    {
                        "data": "DESC_ITEN"
                    },
                    {
                        "data": "DESC_DE"
                    },
                    {
                        "data": "DESC_ATE"
                    },
                    {
                        "data": "COMISSAO"
                    },
                    {
                        "data": "TIPO"
                    },
                    {
                        "data": "REPRESENTANTE"
                    },
                    {
                        "data": "NOME_REP"
                    },
                    {
                        "data": "TAB_PRE"
                    },
                    {
                        "data": "DESC_TABPRECO"
                    },
                    {
                        "data": "DESCONTO"
                    }
                ],
                "columnDefs": [
                    {
                        render(data) {
                            return parseFloat(data).toLocaleString("pt-BR", {
                                maximumFractionDigits: 2,
                                minimumFractionDigits: 2
                            });
                        },
                        targets: [3, 4],
                        "className": 'pr-2 text-right'
                    }
                ]
            });

            await prencheCamposComissao(json)

        } catch {

        } finally {
            $.LoadingOverlay('hide');
        }
    };

    async function prencheCamposComissao(data) {
        try{
            const dataUnico = data.filter(
                (com) =>
                    com.REPRESENTANTE == data?.[0]?.REPRESENTANTE &&
                    com.CODIGO == data?.[0]?.CODIGO &&
                    com.TAB_PRE == data?.[0]?.TAB_PRE
            );
    
            insereValor('#txtTabPreco', dataUnico[0].TAB_PRE, dataUnico[0].DESC_TABPRECO);
            insereValor('#txtProduto', dataUnico[0].CODIGO, dataUnico[0].DESC_ITEN);
            insereValor('#txtRepresentante', dataUnico[0].REPRESENTANTE, dataUnico[0].NOME_REP);
    
            for (let i = 1; i <= 15; i++) {
                $(`#txtValor${String(i).padStart(2, '0')}`).val('');
                $(`#txtCom${String(i).padStart(2, '0')}`).val('');
            }
    
            const dados = $('#tabelaComissoesCadastro').DataTable().data().toArray();
    
            dados.forEach((linha, index) => {
                const i = index + 1;
                if (i <= 15) {
                    $(`#txtValor${String(i).padStart(2, '0')}`).val(linha.DESC_DE || '');
                    $(`#txtCom${String(i).padStart(2, '0')}`).val(linha.COMISSAO || '');
                }
            });
        } finally {
            aplicaMascara()
        }
    }

    async function deletaSequenciaComissoes(seq) {
        $.LoadingOverlay('show');
        try {
            const url = `/sisplan/cadcomissao/v1/excluisequencia?`;

            const filtros = `SEQUENCIA=${seq}`
            const response = await requisicao("DELETE", url, filtros, '', 90000);

            if (response.status != 200) {
                msgAlerta(json.mensagem);
                return;
            }

            $.LoadingOverlay('hide')

            await criaMensagemSucesso('Sequência de comissões excluída com sucesso!', () => {
                window.location.href = `${BASE_URI}/comissao`;
            });
        } catch (error) {
            console.error(error);
            $.LoadingOverlay('hide')
            msgErro('Não foi possível excluir essa sequência de comissões! Por favor, verifique.');
            return;
        }
    }

    await buscaComissoesSeq();

    function aplicaMascara() {
        $(".camposDecimais").off('input')
        $(".camposDecimais").on('input', function () {
            let valor = $(this).val().replace(',', '.');

            valor = valor.replace(/[^0-9.]/g, '');

            const partes = valor.split('.');
            if (partes.length > 2) {
                valor = partes[0] + '.' + partes.slice(1).join('');
            }

            $(this).val(valor);
        });

        $(".camposDecimais").off('blur')
        $(".camposDecimais").on('blur', function () {
            let valor = $(this).val().replace(',', '.');

            if (valor === '' || isNaN(valor)) {
                valor = '0.00';
            } else {
                valor = parseFloat(valor).toFixed(2);
            }

            $(this).val(valor);
        });
    }

});