/**
 * TEMPLATE: custom-base.js
 * =============================================
 * JavaScript client-side para formularios Fluig.
 * Roda no NAVEGADOR (ES6 permitido, mas ES5 recomendado para IE11).
 *
 * Funcoes inclusas:
 * - Autopreenchimento do solicitante (WCMAPI)
 * - Inicializacao de calendarios (FLUIGC.calendar)
 * - Inicializacao de mascaras monetarias
 * - Funcoes de tabela pai-filho (add/delete)
 * - Helpers de data/hora (padrao producao VIPal)
 * - Callback de zoom (setSelectedZoomItem)
 * - Funcoes utilitarias (getVal, setVal, Numero)
 *
 * INSTRUCOES:
 * - Ajuste os IDs dos campos conforme seu formulario
 * - Remova funcoes que nao se aplicam
 * - Adicione regras de negocio especificas
 */

// =============================================
// INICIALIZACAO
// =============================================
$(document).ready(function () {
    preencherDadosSolicitante();
    inicializarCalendario();
    inicializarMascaras();
});

// =============================================
// AUTOPREENCHIMENTO DO SOLICITANTE
// Preenche nome, login e data na primeira abertura
// =============================================
function preencherDadosSolicitante() {
    // Somente preenche se estiver vazio (primeira abertura)
    if (!$('#solicitante').val()) {
        $('#solicitante').val(WCMAPI.user);
        $('#loginSolicitante').val(WCMAPI.userId);
    }

    if (!$('#data_solicitacao').val()) {
        $('#data_solicitacao').val(fnBuscarDataHora('data'));
    }
}

// =============================================
// CALENDARIO FLUIG
// Adicione uma chamada para cada campo de data
// =============================================
function inicializarCalendario() {
    // FLUIGC.calendar('#id_campo_data');
    // FLUIGC.calendar('#data_necessidade');
}

// =============================================
// MASCARAS
// Requer jquery.mask.min.js no <head>
// =============================================
function inicializarMascaras() {
    if ($.fn.mask) {
        // Mascara monetaria (R$ 1.000,00)
        // $('[name="valor_total"]').mask('#.##0,00', { reverse: true });

        // CPF: 000.000.000-00
        // $('[name="cpf"]').mask('000.000.000-00');

        // CNPJ: 00.000.000/0000-00
        // $('[name="cnpj"]').mask('00.000.000/0000-00');

        // Telefone: (00) 90000-0000
        // $('[name="telefone"]').mask('(00) 90000-0000');

        // CEP: 00000-000
        // $('[name="cep"]').mask('00000-000');
    }
}

// =============================================
// FUNCOES DE TABELA PAI-FILHO
// =============================================

/**
 * Deleta uma linha da tabela pai-filho.
 * Uso no HTML: onclick="fnCustomDelete(this, this.name)"
 */
function fnCustomDelete(oElement, sName) {
    var tr = $(oElement).closest('tr');
    fnWdkRemoveChild(tr[0]);
}

// =============================================
// CALLBACK DE ZOOM
// Executada automaticamente quando o usuario
// seleciona um item no campo zoom.
// =============================================
function setSelectedZoomItem(selectedItem) {
    // Identifica qual zoom disparou pelo inputName ou inputId
    if (selectedItem.inputName == 'departamento') {
        // Preenche campo hidden com o codigo
        $('#cod_departamento').val(selectedItem['codigo']);
    }

    // Adicione mais blocos if para outros zooms:
    // if (selectedItem.inputName == 'centro_custo') {
    //     $('#cod_centro_custo').val(selectedItem['codigo']);
    //     // Pode recarregar outro zoom dependente:
    //     // reloadZoomFilterValues('outro_zoom', 'campo_filtro,' + selectedItem['codigo']);
    // }
}

/**
 * Executada quando o usuario remove um item do zoom.
 */
function removedZoomItem(removedItem) {
    if (removedItem.inputName == 'departamento') {
        $('#cod_departamento').val('');
    }
}

// =============================================
// FUNCOES DE DATA/HORA (padrao producao VIPal)
// =============================================

/**
 * Retorna data ou hora atual formatada.
 * @param {string} tipo - 'data' retorna dd/mm/yyyy, 'hora' retorna HH:mm
 */
function fnBuscarDataHora(tipo) {
    var fullDate = new Date();

    var hora = fullDate.getHours();
    var minuto = fullDate.getMinutes();
    if (hora <= 9) { hora = '0' + hora; }
    if (minuto <= 9) { minuto = '0' + minuto; }
    var hrRetorno = hora + ':' + minuto;

    var dia = fullDate.getDate().toString();
    if (dia.length == 1) { dia = '0' + dia; }
    var mes = (fullDate.getMonth() + 1).toString();
    if (mes.length == 1) { mes = '0' + mes; }
    var dtRetorno = dia + '/' + mes + '/' + fullDate.getFullYear();

    if (tipo == 'data') { return dtRetorno; }
    if (tipo == 'hora') { return hrRetorno; }
}

/**
 * Inverte data de dd/mm/yyyy para yyyy-mm-dd (para banco).
 */
function fnInverteData(data) {
    var partes = data.split('/');
    return partes[2] + '-' + partes[1] + '-' + partes[0];
}

// =============================================
// FUNCOES DE STATUS DO PAINEL
// Preenche o span com nome do usuario + data
// =============================================

/**
 * Preenche o span de status de um painel.
 * Chamada pelo displayFields ao carregar atividades anteriores.
 */
function preencherSpanStatus(nAtiv) {
    var nomeUser = $('#vUserSpan_' + nAtiv).val();
    var dataUser = $('#vDateSpan_' + nAtiv).val();

    if (nomeUser && dataUser) {
        $('#span_' + nAtiv).text(nomeUser + ' - ' + dataUser);
    }
}

// =============================================
// FUNCOES UTILITARIAS
// =============================================

/**
 * Permite apenas numeros no campo.
 * Uso no HTML: 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;
}

/**
 * Obtem valor de um campo (wrapper).
 */
function getVal(campo) {
    return $.trim($('#' + campo).val());
}

/**
 * Define valor de um campo (wrapper).
 */
function setVal(campo, valor) {
    $('#' + campo).val(valor);
}

/**
 * Limpa valor monetario para numero decimal.
 * Exemplo: "1.234,56" -> 1234.56
 */
function limparValorMonetario(valorStr) {
    if (!valorStr) return 0;
    valorStr = valorStr.replace(/\./g, '').replace(',', '.');
    return parseFloat(valorStr) || 0;
}

/**
 * Exibe toast de notificacao Fluig.
 * @param {string} mensagem - Texto da mensagem
 * @param {string} tipo - 'success', 'info', 'warning', 'danger'
 */
function exibirToast(mensagem, tipo) {
    FLUIGC.toast({
        title: 'Aviso',
        message: mensagem,
        type: tipo || 'info'
    });
}
