$(document).ready(function () {
  try {
    FLUIGC.calendar('#dataNec');
  } catch (e) {
    console.warn("Erro ao iniciar calendário:", e);
  }

  toggleBotaoAddItem(); // inicia escondido

  /* ========= Eventos ========= */
  $('#precoRef, #quantidade').on('input', recalcTotal);

  // formata o teto de preço só quando o usuário sair do campo
  $('#precoRef').on('blur', function() {
    const p = brMoneyToFloat($(this).val());
    $(this).val(floatToBRL(p));
    recalcTotal();
  });

  $('#qtdMais').on('click', function () {
    let v = parseInt($('#quantidade').val() || '0', 10);
    $('#quantidade').val(v + 1);
    recalcTotal();
  });

  $('#qtdMenos').on('click', function () {
    let v = parseInt($('#quantidade').val() || '0', 10);
    v = Math.max(0, v - 1);
    $('#quantidade').val(v);
    recalcTotal();
  });

  $('#btnBuscaProd').on('click', consultarProdutos);
  $('#btnLimpaProd').on('click', limparCamposPrincipais);
  $('#btnAddItem').on('click', adicionarItem);
});

/* ========= Total / Quantidade ========= */
function recalcTotal() {
  const q = parseFloat($('#quantidade').val() || '0');
  const p = brMoneyToFloat($('#precoRef').val());
  const t = (q * p) || 0;
  $('#total').val(floatToBRL(t));

}

function setSelectedZoomItem(selectedItem) {
  if (selectedItem.inputId === "estabelecimento") {
    // joga o código da filial (cnpj, etc.)
    $("#filialdest").val(selectedItem.CNPJ);   // supondo que o dataset dsSysCompany devolva o campo CNPJ
    $("#filialest").val(selectedItem.ESTADO);  // supondo que o dataset dsSysCompany devolva o campo ESTADO
    $("#filialprotheus").val(selectedItem.CODIGO);  // supondo que o dataset dsSysCompany devolva o campo CODIGO
  }
  if (selectedItem.inputId === "centro_custo") {
    // joga o código da filial (cnpj, etc.)
    $("#gestor_cc").val(selectedItem.idGestor);   // supondo que o dataset Centro_custo devolva o campo GestorCentroCusto
    $("#codigocentroCusto").val(selectedItem.codigoCentroCusto);   // supondo que o dataset Centro_custo devolva o campo GestorCentroCusto
  }


}

function removedZoomItem(removedItem) {
  if (removedItem.inputId === "estabelecimento") {
    // Quando remover a empresa, limpa os campos relacionados
    $("#filialDesc").val('');
    $("#filialest").val('');
  }
}

/* ========= Config ========= */
const DATASET_PRODUTOS = "dsProd"; // dataset de produtos
let todosProdutos = [];
let paginaAtual = 1;
const itensPorPagina = 10;

/* ========= Utils ========= */
function escapeHTML(txt) {
  return $('<div>').text(txt == null ? '' : String(txt)).html();
}

function brMoneyToFloat(v) {
  if (!v) return 0;
  return parseFloat(
    String(v)
      .replace(/R\$/g, '')   // remove "R$"
      .replace(/\s/g, '')    // remove espaços
      .replace(/\./g, '')    // remove pontos de milhar
      .replace(',', '.')     // troca vírgula por ponto
  ) || 0;
}

function floatToBRL(n) {
  try {
    return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(n || 0);
  } catch (_) {
    return 'R$ ' + (n || 0).toFixed(2).replace('.', ',');
  }
}

/* ========= Modal Consulta Produtos ========= */
function consultarProdutos() {
  FLUIGC.modal({
    title: 'Consulta de Produtos',
    content:
      '<div id="buscaProduto" style="margin-bottom:10px;">' +
      '<input type="text" id="filtroDescricao" class="form-control" placeholder="Buscar por nome..." onkeyup="filtrarProdutos()">' +
      '</div>' +
      '<div id="listaProdutos"></div>' +
      '<div id="paginacaoProdutos" style="margin-top:10px; text-align:center;"></div>',
    id: 'modalConsultaProdutos',
    size: 'large',
    actions: [{ 'label': 'Fechar', 'autoClose': true }]
  }, function (err) {
    if (!err) carregaListaProdutos();
  });
}

function carregaListaProdutos(filtro) {
  // Só chama o dataset se ainda não carregou nada
  if (todosProdutos.length === 0) {
    let dataset = DatasetFactory.getDataset(DATASET_PRODUTOS, null, null, null);
    todosProdutos = dataset && dataset.values ? dataset.values : [];
    console.log("Produtos carregados do dataset:", todosProdutos.length);
  }

  paginaAtual = 1;
  renderizaProdutos(filtro);
}


function filtrarProdutos() {
  paginaAtual = 1;
  renderizaProdutos();
}

function renderizaProdutos(filtro) {
  filtro = (filtro || $('#filtroDescricao').val() || '').toLowerCase();

  // Agora filtra no cache (sem chamar dataset de novo)
  const produtosFiltrados = todosProdutos.filter(p =>
    (p.descricao || '').toLowerCase().includes(filtro) ||
    (p.codigo || '').toLowerCase().includes(filtro) ||
    (p.medida || '').toLowerCase().includes(filtro)
  );

  const inicio = (paginaAtual - 1) * itensPorPagina;
  const fim = inicio + itensPorPagina;
  const produtosPagina = produtosFiltrados.slice(inicio, fim);

  let html = `
    <table class="table table-striped">
      <thead>
        <tr>
          <th>Codigo</th>
          <th>Descricao</th>
          <th>UM</th>
          <th>Ultimo Preco</th>
          <th>Acao</th>
        </tr>
      </thead>
      <tbody>
  `;

  if (produtosPagina.length === 0) {
    html += `
      <tr>
        <td colspan="5" class="text-center text-muted">
          Nenhum produto encontrado
        </td>
      </tr>`;
  } else {
    produtosPagina.forEach(produto => {
      const codigo = escapeHTML(produto['codigo']);
      const descricao = escapeHTML(produto['descricao']);
      const um = escapeHTML(produto['medida'] || '');
      const preco = produto['ultimo_preco'] || '0,00';

      html += `
        <tr>
          <td>${codigo}</td>
          <td>${descricao}</td>
          <td>${um}</td>
          <td>${preco}</td>
          <td>
            <button class="btn btn-sm btn-success selecionar-produto"
                    data-codigo="${codigo}"
                    data-descricao="${descricao}"
                    data-preco="${preco}">
              Selecionar
            </button>
          </td>
        </tr>`;
    });
  }

  html += `</tbody></table>`;
  $('#listaProdutos').html(html);

  renderizaPaginacao(produtosFiltrados.length);
}



function renderizaPaginacao(totalItens) {
  const totalPaginas = Math.ceil(totalItens / itensPorPagina);
  let html = '';
  if (totalPaginas > 1) {
    if (paginaAtual > 1) {
      html += '<button class="btn btn-sm btn-default" onclick="mudarPagina(' + (paginaAtual - 1) + ')">Anterior</button> ';
    }
    html += ' Pagina ' + paginaAtual + ' de ' + totalPaginas + ' ';
    if (paginaAtual < totalPaginas) {
      html += '<button class="btn btn-sm btn-default" onclick="mudarPagina(' + (paginaAtual + 1) + ')">Proxima</button>';
    }
  }
  $('#paginacaoProdutos').html(html);
}

function mudarPagina(n) {
  paginaAtual = n;
  renderizaProdutos();
}

/* ========= Seleção ========= */
function selecionarProduto(codigo, descricao, preco) {
  $('#produtoCod').val(codigo);
  $('#descProduto').val(codigo + ' - ' + descricao);
  $('#ultimoPreco').val(preco);

  FLUIGC.toast({ title: 'Produto', message: 'Selecionado: ' + descricao, type: 'success' });
  $('#modalConsultaProdutos').modal('hide');

  toggleBotaoAddItem(); // 👈 mostra botão
}

function toggleBotaoAddItem() {
  const temProduto = $('#produtoCod').val() || $('#descProduto').val();
  if (temProduto && temProduto.trim() !== "") {
    $('#btnAddItem').show();
  } else {
    $('#btnAddItem').hide();
  }
}
/* ========= Adicionar Item ========= */
function adicionarItem() {
  const cod = $('#produtoCod').val();
  const desc = $('#descProduto').val();
  const qtd = $('#quantidade').val();

  if (!cod) {
    FLUIGC.toast({ title: 'Atenção', message: 'Selecione um produto/serviço', type: 'warning' });
    return;
  }

  const idx = wdkAddChild('tbItens');

  setTimeout(() => {
    $('input[name="Codproduto___' + idx + '"]').val(cod);

    const somenteDesc = desc.includes('-') ? desc.split('-').slice(1).join('-').trim() : desc;
    $('input[name="produtoDesc___' + idx + '"]').val(somenteDesc);
    $('input[name="qtd___' + idx + '"]').val(qtd).on('input', function () { recalcLinha(this); });
    $('input[name="ultimoPreco___' + idx + '"]').val(prec).on('input', function () { recalcLinha(this); });

    atualizarIndex();
    atualizarTotais();
  }, 0);

  FLUIGC.toast({ title: 'Item', message: 'Adicionado à lista', type: 'success' });

  limparCamposPrincipais();
}

/* ========= Limpar campos principais ========= */
function limparCamposPrincipais() {
  $('#produtoCod, #descProduto').val('');
  $('#quantidade').val('0');
  $('#precoRef').val('0,00');
  $('#fnComprovante').val('');


  toggleBotaoAddItem(); // 👈 mostra botão
}

/* ========= Eventos delegados ========= */
$(document).on('click', '.selecionar-produto', function () {
  const codigo = $(this).data('codigo');
  const descricao = $(this).data('descricao');
  const preco = $(this).data('preco');
  selecionarProduto(codigo, descricao, preco);
});


/* ========= Index das linhas ========= */
function atualizarIndex() {
  $('#tbItens tbody tr.tableRow').each(function (i) {
    if (!$(this).is('[detail=true]')) {
      $(this).find('.tableIndex').text(i);
    }
  });
}


/* ========= Remover linha ========= */
function fnWdkRemoveChild(el) {
  $(el).closest('tr').remove();
  atualizarIndex();
  atualizarTotais();
}

/* ========= Link do produto ========= */
function handleProductLink(el) {
  const $row = $(el).closest("tr");
  const $hidden = $row.find("input.produto-link");
  let linkAtual = $hidden.val();

  if (!linkAtual) {
    // ainda não tem link → pedir ao usuário
    let novoLink = prompt("Insira o link do produto:");
    if (novoLink && novoLink.trim() !== "") {
      $hidden.val(novoLink.trim()); // grava no hidden (vai persistir no Fluig)
    }
  } else {
    // já existe link → abrir
    window.open(linkAtual, "_blank");
  }
}

$(function () {
  var steps = [
    { state: 1,   label: "Solicitação" },
    { state: 121, label: "Validando Necessidade" },
    { state: 82,  label: "Enviando pedido" },
    { state: 114, label: "Cotação Iniciada" },
    { state: 105, label: "Indicar Cotação" },
    { state: 137, label: "Confirmação da cotação" },
    { state: 133, label: "Aprovação Gestor" },
    { state: 147, label: "Aprovação Ger. Financeiro" },
    { state: 158, label: "Aprovação CEO" },
    { state: 18,  label: "Recebimento do Produto" },
    { state: 24,  label: "Problema" },
    { state: 52,  label: "Fim" }
  ];

  var current = parseInt($("#activity").val() || "0", 10);
  var idxAtual = steps.findIndex(function (s) { return s.state === current; });
  if (idxAtual < 0) idxAtual = 0;

  $("#wizard-steps .step-item").each(function (i) {
    if (i < idxAtual) $(this).addClass("done");
    if (i === idxAtual) $(this).addClass("active");
  });

  // clique nos steps
  $("#wizard-steps .step-item").on("click", function () {
    var index = $(this).index();
    var step = steps[index];
    if (!step) return;

    // 👉 se já estava ativo, mostra tudo de novo
    if ($(this).hasClass("active") && $(".activity:visible").length === 1) {
      $(".activity").show();
      $("#wizard-steps .step-item").removeClass("active");
      return;
    }

    // senão, mostra só a activity clicada
    $(".activity").hide();
    $(".activity-" + step.state).show();

    $("#wizard-steps .step-item").removeClass("active");
    $(this).addClass("active");
  });
});


$(document).ready(function () {
  // Quando carregar a página, já pinta o status se tiver valor nos inputs
  let status = $("#statusSCProtheus").val() || "";
  let badgeClass = "badge bg-secondary";

  if (status.toLowerCase().includes("sucesso")) badgeClass = "badge bg-success";
  if (status.toLowerCase().includes("erro")) badgeClass = "badge bg-danger";

  $("#statusSCProtheus_label")
    .text(status || "-")
    .removeClass()
    .addClass(badgeClass);
});

function recalcularTotalCotacao() {
    var soma = 0;

    $("input[name^='selecionado___']").each(function() {
        var idx = $(this).attr("id").split("___")[1];

        // pega qtd e preço da linha
        var qtd   = parseFloat($("#qtdc___" + idx).val() || "0");
        var preco = parseFloat($("#preco___" + idx).val() || "0");

        // calcula total da linha
        var total = qtd * preco;

        // atualiza campo total da linha
        $("#total___" + idx).val(total.toFixed(2));

        // se marcado, acumula na soma
        if ($(this).is(":checked")) {
            soma += total;
        }
    });

    // Atualiza o hidden e dispara change pro Fluig gravar
    $("#valorTotalCotacao").val(soma.toFixed(2)).trigger("change");
}
// dispara sempre que marcar/desmarcar
$(document).on("change", "input[name^='selecionado___']", function() {
    recalcularTotalCotacao();
});

// recalcula ao abrir a atividade
$(document).ready(function() {
    recalcularTotalCotacao();
});

// garante que o total seja salvo antes de enviar a atividade
function beforeSendValidate(numState, nextState) {
    console.log("Executando beforeSendValidate, recalculando total...");
    recalcularTotalCotacao();
    return true; // precisa retornar true senão bloqueia o envio
}
