/**
 * TEMPLATE: inputFields-base.js
 * =============================================
 * Evento SERVER-SIDE executado antes de salvar
 * os dados do formulario. Usado para:
 * - Transformar dados (converter datas, limpar texto)
 * - Gravar historico de atividades (trilha de auditoria)
 * - Calcular valores derivados
 * - Definir roteamento condicional
 *
 * IMPORTANTE:
 * - Roda NO SERVIDOR (ES5 obrigatorio)
 * - Usa form.getValue/setValue (NAO hAPI)
 * - Nao tem acesso a jQuery ou DOM
 * - Chamado ANTES do validateForm
 *
 * PADRAO DE PRODUCAO (baseado em VIPal, WF-0041, WF-0035):
 * 1. Ler WKNumState e WKUser
 * 2. Executar logica por atividade
 * 3. Converter datas BR->EN
 * 4. Gravar historico chamando gravaHistorico()
 */

function inputFields(form, customHTML) {

    var WKNumState = parseInt(getValue("WKNumState"));
    var WKUser = getValue("WKUser");

    // =============================================
    // ATIVIDADE ${ATIV_1}: Solicitante
    // =============================================
    if (WKNumState == ${ATIV_1}) {

        // --- Converter datas BR para EN (para ordenacao/banco) ---
        var dataBR = form.getValue("${CAMPO_DATA}");
        if (dataBR != null && dataBR != "") {
            form.setValue("${CAMPO_DATA}_EN", fnInverteData(dataBR));
        }

        // --- Gravar historico ---
        var obs = form.getValue("${CAMPO_OBS}");
        obs = fnLimpaCaracteres(obs);
        obs = fnReplaceNovaLinha(obs);
        gravaHistorico(form, WKNumState, obs, "");

        // --- Gravar span de status (usuario + data) ---
        form.setValue("vUserSpan_" + WKNumState, fnBuscarColleague(WKUser, "colleagueName"));
        form.setValue("vDateSpan_" + WKNumState, fnBuscarDataHora("data") + " " + fnBuscarDataHora("hora"));
    }

    // =============================================
    // ATIVIDADE ${ATIV_2}: Aprovacao
    // =============================================
    if (WKNumState == ${ATIV_2}) {

        var decisao = form.getValue("aprovacao_${ATIV_2}");
        var obs = form.getValue("obs_${ATIV_2}");
        obs = fnLimpaCaracteres(obs);

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

        // Gravar span de status
        form.setValue("vUserSpan_" + WKNumState, fnBuscarColleague(WKUser, "colleagueName"));
        form.setValue("vDateSpan_" + WKNumState, fnBuscarDataHora("data") + " " + fnBuscarDataHora("hora"));

        // --- Roteamento condicional (exemplo) ---
        // if (decisao == "N") {
        //     form.setValue("enviaCorrecao", "S");
        // }
    }

    // =============================================
    // ROTEAMENTO POR VALOR (exemplo avancado)
    // Definir qual aprovador recebe com base no valor
    // =============================================
    // if (WKNumState == ${ATIV_1}) {
    //     var valorStr = form.getValue("valor_total");
    //     if (valorStr != null && valorStr != "") {
    //         var valor = parseFloat(valorStr.replace(/\./g, "").replace(",", "."));
    //         if (valor >= 50000) {
    //             form.setValue("enviaGerente", "S");
    //             form.setValue("enviaDiretor", "S");
    //         } else if (valor >= 10000) {
    //             form.setValue("enviaGerente", "S");
    //             form.setValue("enviaDiretor", "N");
    //         } else {
    //             form.setValue("enviaGerente", "N");
    //             form.setValue("enviaDiretor", "N");
    //         }
    //     }
    // }
}

// =============================================
// FUNCOES HELPER (ES5)
// =============================================

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 fnReplaceNovaLinha(texto) {
    if (texto == null) return "";
    texto = replaceAll(texto, "\n", "<br>");
    texto = replaceAll(texto, "\r", "");
    return texto;
}

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

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 "";
}

function fnBuscarDataHora(tipo) {
    var fullDate = new java.util.Date();
    var sdf;
    if (tipo == "data") {
        sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
    } else {
        sdf = new java.text.SimpleDateFormat("HH:mm");
    }
    return sdf.format(fullDate);
}

function fnBuscarColleague(login, campo) {
    var c1 = DatasetFactory.createConstraint(
        "colleaguePK.colleagueId", login, login, ConstraintType.MUST);
    var ds = DatasetFactory.getDataset("colleague", null, new Array(c1), null);
    if (ds.rowsCount > 0) {
        return ds.getValue(0, campo);
    }
    return "";
}
