/**
 * TEMPLATE: enableFields-base.js
 * =============================================
 * Evento SERVER-SIDE que controla quais campos
 * ficam HABILITADOS ou DESABILITADOS em cada
 * atividade do processo BPM.
 *
 * IMPORTANTE:
 * - Roda NO SERVIDOR (ES5 obrigatorio)
 * - Usa form.setEnabled(campo, boolean) para controlar campos
 * - Padrao: desabilitar TUDO, depois habilitar so o necessario
 * - Campos de atividades anteriores ficam disabled
 * - Tabelas pai-filho: iterar com getChildrenIndexes()
 *
 * PADRAO DE PRODUCAO (baseado em VIPal, CELI):
 * 1. Ler WKNumState
 * 2. Desabilitar todos os campos
 * 3. Habilitar apenas os campos da atividade atual
 * 4. Tratar tabelas pai-filho separadamente
 */

function enableFields(form) {

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

    // =============================================
    // PASSO 1: DESABILITAR TUDO
    // =============================================
    var camposTodos = [
        // Campos do painel 1 (dados principais)
        "solicitante",
        "data_solicitacao",
        "${CAMPO_1}",
        "${CAMPO_2}",
        "${CAMPO_3}",
        "${CAMPO_DATA}",
        "${CAMPO_OBS}",
        // Campos do painel 2 (aprovacao)
        "aprovacao_${ATIV_2}",
        "obs_${ATIV_2}"
    ];

    desabilitarCampos(form, camposTodos);

    // Desabilitar tabelas pai-filho (se houver)
    // desabilitarTabelaFilho(form, "${NOME_TABELA}");

    // =============================================
    // PASSO 2: HABILITAR POR ATIVIDADE
    // =============================================

    // -- Atividade ${ATIV_1}: Solicitante --
    if (WKNumState == ${ATIV_1}) {
        var camposAtiv1 = [
            "${CAMPO_1}",
            "${CAMPO_2}",
            "${CAMPO_3}",
            "${CAMPO_DATA}",
            "${CAMPO_OBS}"
        ];
        habilitarCampos(form, camposAtiv1);

        // Habilitar tabela pai-filho (se houver)
        // habilitarTabelaFilho(form, "${NOME_TABELA}");
    }

    // -- Atividade ${ATIV_2}: Aprovacao --
    if (WKNumState == ${ATIV_2}) {
        var camposAtiv2 = [
            "aprovacao_${ATIV_2}",
            "obs_${ATIV_2}"
        ];
        habilitarCampos(form, camposAtiv2);
    }

    // -- Visualizacao (atividade 0 ou inexistente) --
    // Tudo ja esta desabilitado pelo passo 1
}

// =============================================
// FUNCOES AUXILIARES (ES5)
// =============================================

/**
 * Desabilita uma lista de campos.
 * Trata radio buttons automaticamente.
 */
function desabilitarCampos(form, listaCampos) {
    for (var i = 0; i < listaCampos.length; i++) {
        try {
            form.setEnabled(listaCampos[i], false);
        } catch (e) {
            // Campo pode nao existir, ignorar
        }
    }
}

/**
 * Habilita uma lista de campos.
 * Trata radio buttons automaticamente.
 */
function habilitarCampos(form, listaCampos) {
    for (var i = 0; i < listaCampos.length; i++) {
        try {
            form.setEnabled(listaCampos[i], true);
        } catch (e) {
            // Campo pode nao existir, ignorar
        }
    }
}

/**
 * Desabilita todos os campos de uma tabela pai-filho.
 * Itera pelos indices existentes e desabilita cada campo.
 */
function desabilitarTabelaFilho(form, nomeTabela) {
    var indices = form.getChildrenIndexes(nomeTabela);
    var camposFilho = ["${CAMPO_FILHO_1}", "${CAMPO_FILHO_2}", "${CAMPO_FILHO_3}"];

    for (var i = 0; i < indices.length; i++) {
        for (var j = 0; j < camposFilho.length; j++) {
            try {
                form.setEnabled(camposFilho[j] + "___" + indices[i], false);
            } catch (e) {
                // Ignorar
            }
        }
    }
}

/**
 * Habilita todos os campos de uma tabela pai-filho.
 */
function habilitarTabelaFilho(form, nomeTabela) {
    var indices = form.getChildrenIndexes(nomeTabela);
    var camposFilho = ["${CAMPO_FILHO_1}", "${CAMPO_FILHO_2}", "${CAMPO_FILHO_3}"];

    for (var i = 0; i < indices.length; i++) {
        for (var j = 0; j < camposFilho.length; j++) {
            try {
                form.setEnabled(camposFilho[j] + "___" + indices[i], true);
            } catch (e) {
                // Ignorar
            }
        }
    }
}
