/**
 * inputFields.js — Exemplo: Solicitacao de Compras
 * 
 * Executa ANTES de salvar os dados do formulario.
 * Uso: transformar dados, gravar historico, definir roteamento.
 * 
 * API disponivel:
 *   form.getValue("campo") - ler campo do formulario
 *   form.setValue("campo", valor) - gravar campo do formulario
 *   getValue("WKNumState") - atividade atual
 *   getValue("WKUser") - login do usuario logado
 */
function inputFields(form, customHTML) {
    var WKNumState = parseInt(getValue("WKNumState"));
    var WKUser = getValue("WKUser");

    // ============================================
    // ATIVIDADE 4 — Solicitante preenche dados
    // ============================================
    if (WKNumState == 4) {
        // Converter data BR (dd/mm/yyyy) para EN (yyyy-mm-dd) para ordenacao
        var dataNecessidade = form.getValue("data_necessidade");
        if (dataNecessidade != null && dataNecessidade != "") {
            form.setValue("data_necessidade_EN", fnInverteData(dataNecessidade));
        }

        // Limpar caracteres especiais da observacao
        var obs = form.getValue("observacao_solicitante");
        obs = fnLimpaCaracteres(obs);

        // Gravar historico da atividade
        gravaHistorico(form, WKNumState, obs, "Solicitacao enviada");
    }

    // ============================================
    // ATIVIDADE 5 — Gestor aprova/reprova
    // ============================================
    if (WKNumState == 5) {
        var decisao = form.getValue("aprovacao_gestor");
        var obs = form.getValue("obs_gestor");
        obs = fnLimpaCaracteres(obs);

        var acao = (decisao == "S") ? "Aprovado pelo Gestor" : "Reprovado pelo Gestor";
        gravaHistorico(form, WKNumState, obs, acao);

        // Gravar situacao
        if (decisao == "S") {
            form.setValue("situacao_solicitacao", "Aprovado");
        } else {
            form.setValue("situacao_solicitacao", "Reprovado");
        }
    }
}

// ============================================
// FUNCAO: gravaHistorico
// Gera trilha de auditoria formatada por atividade
// ============================================
function gravaHistorico(form, atividade, observacao, acao) {
    var dataHoje = fnBuscarDataHora("data");
    var horaHoje = fnBuscarDataHora("hora");
    var usuario = getValue("WKUser");

    // Montar linha do historico
    var histNovo = dataHoje + " - " + horaHoje + " - " + usuario;
    if (acao != "") {
        histNovo = histNovo + " - " + acao;
    }
    if (observacao != "") {
        histNovo = histNovo + " - " + observacao;
    }

    // Concatenar com historico anterior da atividade
    var histAnterior = form.getValue("histAtiv_" + atividade);
    if (histAnterior == null) histAnterior = "";

    var histFinal = histNovo;
    if (histAnterior != "") {
        histFinal = histNovo + "#" + histAnterior;
    }
    form.setValue("histAtiv_" + atividade, histFinal);

    // Atualizar historico geral
    var histGeral = form.getValue("histGeral");
    if (histGeral == null) histGeral = "";
    form.setValue("histGeral", histNovo + "#" + histGeral);

    // Gravar data do ultimo historico em formato EN
    form.setValue("dtUltimoHistorico_EN", fnInverteData(dataHoje));
}

// ============================================
// HELPERS
// ============================================

/** Limpa caracteres que quebram o historico */
function fnLimpaCaracteres(texto) {
    if (texto == null) return "";
    texto = replaceAll(texto, '#', '');
    texto = replaceAll(texto, '"', '');
    texto = replaceAll(texto, "'", "");
    texto = replaceAll(texto, '>', '');
    texto = replaceAll(texto, '<', '');
    return texto;
}

function replaceAll(texto, arg1, arg2) {
    while (texto.indexOf(arg1) != -1) {
        texto = texto.replace(arg1, arg2);
    }
    return texto;
}

/** Inverte data entre BR (dd/mm/yyyy) e EN (yyyy-mm-dd) */
function fnInverteData(aux) {
    if (aux.indexOf('-') > 0) {
        aux = aux.split('-');
        return aux[2] + '/' + aux[1] + '/' + aux[0];
    } else if (aux.indexOf('/') > 0) {
        aux = aux.split('/');
        return aux[2] + '-' + aux[1] + '-' + aux[0];
    }
    return '';
}

/** Busca data e hora atuais do servidor */
function fnBuscarDataHora(tipo) {
    var agora = new java.util.Date();
    var formato;
    if (tipo == "data") {
        formato = new java.text.SimpleDateFormat("dd/MM/yyyy");
    } else {
        formato = new java.text.SimpleDateFormat("HH:mm");
    }
    return formato.format(agora);
}
