/**
 * TEMPLATE: subprocesso-hapi.js
 * =============================================
 * Iniciar sub-processos via hAPI.startProcess().
 * Usar em eventos de processo (afterTaskComplete,
 * beforeStateEntry, etc.)
 *
 * PADRAO DE PRODUCAO (Kit Qualidade, Plano de Acao):
 * - Coletar dados do processo pai (hAPI.getCardValue)
 * - Montar card (HashMap) com dados para o filho
 * - Definir responsavel via ArrayList
 * - hAPI.startProcess() com 7 parametros
 * - subProcessCreated() para capturar ID do filho
 *
 * EVENTOS RELACIONADOS:
 * - initActivityPlanAction(posicao): chamado N vezes (pai-filho)
 * - subProcessCreated(processId): apos criacao do sub-processo
 */

// =============================================
// FUNCAO PARA INICIAR SUB-PROCESSO
// Chamar de afterTaskComplete, beforeStateEntry, etc.
// =============================================
function fnIniciarSubProcesso(posicao) {

    log.info("=== fnIniciarSubProcesso: inicio, posicao " + posicao);

    var PROCESSO_FILHO = "${CODIGO_PROCESSO_FILHO}";

    // =============================================
    // COLETAR DADOS DO PROCESSO PAI
    // =============================================
    var nrProcessoPai = getValue("WKNumProces").toString();
    var responsavel = hAPI.getCardValue("${CAMPO_RESPONSAVEL}");

    // Se precisar buscar responsavel por nome
    // var filtro = DatasetFactory.createConstraint(
    //     "colleagueName", nomeResponsavel, nomeResponsavel, ConstraintType.MUST);
    // var dsCollab = DatasetFactory.getDataset("colleague", null, new Array(filtro), null);
    // var responsavel = dsCollab.getValue(0, "colleaguePK.colleagueId");

    // =============================================
    // MONTAR LISTA DE RESPONSAVEIS
    // =============================================
    var userList = new java.util.ArrayList();
    userList.add(responsavel);

    // =============================================
    // MONTAR DADOS DO FORMULARIO FILHO
    // =============================================
    var card = new java.util.HashMap();
    card.put("nrProcessoPai", nrProcessoPai);
    card.put("${CAMPO_FILHO_1}", hAPI.getCardValue("${CAMPO_PAI_1}"));
    card.put("${CAMPO_FILHO_2}", hAPI.getCardValue("${CAMPO_PAI_2}"));

    // Para tabelas pai-filho (campos com ___N):
    // card.put("campoFilho", hAPI.getCardValue("campoPai___" + posicao));

    log.info("=== fnIniciarSubProcesso: responsavel=" + responsavel);
    log.info("=== fnIniciarSubProcesso: iniciando " + PROCESSO_FILHO);

    // =============================================
    // INICIAR SUB-PROCESSO
    // =============================================
    hAPI.startProcess(
        PROCESSO_FILHO,             // String - codigo do processo
        0,                          // int - atividade destino (0 = inicio)
        userList,                   // java.util.ArrayList - responsaveis
        "Iniciado automaticamente pelo processo " + nrProcessoPai, // comentario
        true,                       // boolean - completar tarefa inicial
        card,                       // java.util.HashMap - dados do formulario
        true                        // boolean - modo gestor
    );

    log.info("=== fnIniciarSubProcesso: fim");
}

// =============================================
// EVENTO: apos sub-processo ser criado
// (opcional - registrar ID do filho no pai)
// =============================================
function subProcessCreated(processId) {
    log.info("=== subProcessCreated: processo filho " + processId);
    hAPI.setCardValue("nrSubProcesso", processId);
}

// =============================================
// USO EM afterTaskComplete (exemplo)
// =============================================
// function afterTaskComplete(colleagueId, nextSequenceId, userList) {
//     if (nextSequenceId == ${ATIVIDADE_CRIAR_SUB}) {
//         fnIniciarSubProcesso(1);
//     }
// }

// =============================================
// USO COM TABELA PAI-FILHO (criar N sub-processos)
// =============================================
// function afterTaskComplete(colleagueId, nextSequenceId, userList) {
//     if (nextSequenceId == ${ATIVIDADE_CRIAR_SUB}) {
//         // Contar linhas da tabela pai-filho
//         for (var i = 1; i <= 20; i++) {
//             var campo = hAPI.getCardValue("nmResponsavel___" + i);
//             if (campo != null && campo != "" && campo != "undefined") {
//                 fnIniciarSubProcesso(i);
//             } else {
//                 break;
//             }
//         }
//     }
// }
