/**
 * TEMPLATE: displayFields-base.js
 * =============================================
 * Evento SERVER-SIDE executado quando o formulario
 * e renderizado. Controla visibilidade dos paineis
 * e injeta funcoes JavaScript no cliente.
 *
 * IMPORTANTE:
 * - Este codigo roda NO SERVIDOR (ES5 obrigatorio)
 * - jQuery NAO funciona aqui. Use customHTML.append()
 *   para injetar scripts que rodam no navegador
 * - Use form.setValue() para preencher campos
 * - Use getValue("WKNumState") para atividade atual
 * - Use DatasetFactory para consultar dados
 *
 * PADRAO DE PRODUCAO (baseado em VIPal, BOMAG, PROLUX):
 * 1. Ler WKNumState e variaveis de contexto
 * 2. Injetar funcoes getter no HTML via customHTML.append
 * 3. Preencher dados automaticos (solicitante, data)
 * 4. Controlar visibilidade dos paineis
 * 5. Preencher spans de status de atividades anteriores
 */

function displayFields(form, customHTML) {

    // =============================================
    // 1. VARIAVEIS DE CONTEXTO
    // =============================================
    var WKNumState = parseInt(getValue("WKNumState"));
    var WKNumProces = parseInt(getValue("WKNumProces"));
    var WKUser = getValue("WKUser");
    var WKCompany = getValue("WKCompany");

    // Configuracoes do formulario
    form.setHidePrintLink(true);
    form.setShowDisabledFields(true);

    // =============================================
    // 2. INJETAR FUNCOES GETTER NO CLIENTE
    // Permite que o custom.js acesse valores do servidor
    // =============================================
    customHTML.append("<script>function getWKNumState(){ return " + WKNumState + "; }</script>");
    customHTML.append("<script>function getFormMode(){ return '" + form.getFormMode() + "'; }</script>");
    customHTML.append("<script>function getWKUser(){ return '" + WKUser + "'; }</script>");
    customHTML.append("<script>function getWKNumProces(){ return " + WKNumProces + "; }</script>");

    // =============================================
    // 3. ATIVIDADE 0: ABERTURA DO FORMULARIO
    // Preenche dados automaticos do solicitante
    // =============================================
    if (WKNumState == 0) {
        // Buscar dados do usuario logado via dataset colleague
        var c1 = DatasetFactory.createConstraint(
            "colleaguePK.colleagueId", WKUser, WKUser, ConstraintType.MUST);
        var dsUser = DatasetFactory.getDataset("colleague", null, new Array(c1), null);

        if (dsUser.rowsCount > 0) {
            form.setValue("solicitante", dsUser.getValue(0, "colleagueName"));
            form.setValue("loginSolicitante", WKUser);
        }

        // Preencher data atual
        form.setValue("data_solicitacao", fnBuscarDataHora("data"));

        // Definir situacao inicial
        form.setValue("situacao", "Em abertura");

        // Chamar funcao client-side apos carregar
        customHTML.append("<script>$(document).ready(function(){ preencherDadosSolicitante(); });</script>");
    }

    // =============================================
    // 4. CONTROLE DE VISIBILIDADE DOS PAINEIS
    // Cada atividade mostra/expande seu painel
    // =============================================

    // -- Atividade ${ATIV_1}: Solicitante preenche dados --
    if (WKNumState == 0 || WKNumState == ${ATIV_1}) {
        mostrarCollapse(customHTML, "#painelA_ativ_${ATIV_1}");
        esconderPainel(customHTML, "#painel_ativ_${ATIV_2}");
        // esconderPainel(customHTML, "#painel_ativ_${ATIV_3}");
    }

    // -- Atividade ${ATIV_2}: Aprovador 1 --
    if (WKNumState == ${ATIV_2}) {
        mostrarCollapse(customHTML, "#painelA_ativ_${ATIV_1}");
        mostrarCollapse(customHTML, "#painelA_ativ_${ATIV_2}");
        // esconderPainel(customHTML, "#painel_ativ_${ATIV_3}");

        // Preencher dados do aprovador
        var c2 = DatasetFactory.createConstraint(
            "colleaguePK.colleagueId", WKUser, WKUser, ConstraintType.MUST);
        var dsAprov = DatasetFactory.getDataset("colleague", null, new Array(c2), null);

        if (dsAprov.rowsCount > 0) {
            form.setValue("loginAprovador_${ATIV_2}", WKUser);
            form.setValue("nomeAprovador_${ATIV_2}", dsAprov.getValue(0, "colleagueName"));
        }

        // Preencher span de status da atividade anterior
        preencherSpanServidor(customHTML, "${ATIV_1}", form);
    }

    // -- Visualizacao (sem atividade) --
    if (isNaN(WKNumState) || WKNumState == 0) {
        // Mostra todos os paineis colapsados
        customHTML.append("<script>$('.panel').show();</script>");
    }
}

// =============================================
// FUNCOES AUXILIARES (SERVER-SIDE, ES5)
// =============================================

/**
 * Mostra e expande um painel via customHTML.
 */
function mostrarCollapse(customHTML, seletor) {
    customHTML.append("<script>$('" + seletor + "').collapse('show');</script>");
}

/**
 * Esconde um painel via customHTML.
 */
function esconderPainel(customHTML, seletor) {
    customHTML.append("<script>$('" + seletor + "').hide();</script>");
}

/**
 * Preenche o span de status com dados salvos no formulario.
 */
function preencherSpanServidor(customHTML, nAtiv, form) {
    var user = form.getValue("vUserSpan_" + nAtiv);
    var data = form.getValue("vDateSpan_" + nAtiv);

    if (user != null && user != "" && data != null && data != "") {
        customHTML.append("<script>$('#span_" + nAtiv + "').text('" + user + " - " + data + "');</script>");
    }
}

/**
 * Busca data ou hora atual (server-side, ES5).
 * @param {string} tipo - 'data' ou 'hora'
 */
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);
}

/**
 * Busca informacao de um colleague pelo login.
 * @param {string} login - Login do usuario
 * @param {string} campo - Campo desejado (colleagueName, mail, etc)
 */
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 "";
}
