/**
 * custom.js — Solicitação de Compra
 * ============================================
 * Funções client-side: autopreenchimento, máscaras,
 * funções utilitárias e regras de negócio do formulário.
 *
 * IMPORTANTE: Este arquivo NUNCA usa ES6+.
 *             Sempre compatível com ES5 (IE11+).
 */

// =============================================
// INICIALIZAÇÃO (quando o form carrega)
// =============================================
$(document).ready(function () {
    preencherDadosSolicitante();
    inicializarCalendario();
    inicializarMascaras();
});

// =============================================
// AUTOPREENCHIMENTO DO SOLICITANTE
// =============================================
function preencherDadosSolicitante() {
    var nomeUser = WCMAPI.user;
    var loginUser = WCMAPI.userId;

    // Só preenche se estiver vazio (primeira abertura)
    if (!$('#solicitante').val()) {
        $('#solicitante').val(nomeUser);
        $('#loginSolicitante').val(loginUser);
    }

    // Data da solicitação
    if (!$('#data_solicitacao').val()) {
        var hoje = new Date();
        var dd = ('0' + hoje.getDate()).slice(-2);
        var mm = ('0' + (hoje.getMonth() + 1)).slice(-2);
        var yyyy = hoje.getFullYear();
        $('#data_solicitacao').val(dd + '/' + mm + '/' + yyyy);
    }
}

// =============================================
// CALENDÁRIO FLUIG
// =============================================
function inicializarCalendario() {
    FLUIGC.calendar('#data_necessidade');
}

// =============================================
// MÁSCARAS
// =============================================
function inicializarMascaras() {
    // Máscara monetária para valores estimados
    // Nota: o atributo mask="..." no HTML é processado
    // automaticamente pelo jQuery Mask se disponível.
    // Caso contrário, inicializar manualmente:
    if ($.fn.mask) {
        $('[name="item_valor_estimado"]').mask('#.##0,00', { reverse: true });
    }
}

// =============================================
// FUNÇÕES DE TABELA PAI-FILHO
// =============================================

/**
 * Deleta uma linha da tabela pai-filho.
 * Chamada pelo botão de lixeira em cada linha.
 *
 * @param {HTMLElement} oElement — botão clicado
 * @param {string} sName — name do botão
 */
function fnCustomDelete(oElement, sName) {
    var tr = $(oElement).closest('tr');
    fnWdkRemoveChild(tr[0]);
}

// =============================================
// FUNÇÕES UTILITÁRIAS
// =============================================

/**
 * Permite apenas números no campo.
 * Uso: onkeypress="return Numero(event);"
 */
function Numero(evt) {
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    return true;
}

/**
 * Preenche o span de status do painel com usuário + data.
 * Chamada pelo displayFields ao entrar na atividade.
 *
 * @param {string|number} nAtiv — número da atividade
 */
function preencherSpanStatus(nAtiv) {
    var nomeUser = WCMAPI.user;
    var hoje = new Date();
    var dd = ('0' + hoje.getDate()).slice(-2);
    var mm = ('0' + (hoje.getMonth() + 1)).slice(-2);
    var yyyy = hoje.getFullYear();
    var dataFormatada = dd + '/' + mm + '/' + yyyy;

    var spanText = nomeUser + ' - ' + dataFormatada;

    $('#span_' + nAtiv).text(spanText);
    $('#vUserSpan_' + nAtiv).val(nomeUser);
    $('#vDateSpan_' + nAtiv).val(dataFormatada);
}

/**
 * Obtém o valor de um campo do formulário.
 * Wrapper para padronizar acesso.
 */
function getVal(campo) {
    return $.trim($('#' + campo).val());
}

/**
 * Define o valor de um campo do formulário.
 */
function setVal(campo, valor) {
    $('#' + campo).val(valor);
}
