/**
 * Evento: afterTaskComplete
 * Processo: Registro de Ocorrencia (ecm_kgq_ro)
 * Descricao: Ao aprovar na atividade 3, cria sub-processos "Plano de Acao"
 *            para cada item da tabela pai-filho, e envia e-mail de notificacao.
 * Baseado em: Workspace Igao - Kit Qualidade (ecm_kgq_pa)
 */
function afterTaskComplete(colleagueId, nextSequenceId, userList) {
    var numState = getValue("WKNumState");

    // Atividade 3 = Aprovacao do Gestor
    if (numState == "3") {
        log.info("[afterTaskComplete] Atividade 3 — Iniciando sub-processos e notificacao");

        // --- 1. Criar sub-processos para cada item do pai-filho ---
        fnCriarSubProcessos(colleagueId);

        // --- 2. Enviar e-mail de notificacao ---
        fnEnviarNotificacao(colleagueId);
    }
}

/**
 * Cria um sub-processo "Plano de Acao" para cada linha da tabela pai-filho
 */
function fnCriarSubProcessos(colleagueId) {
    var tableName = "tbl_acoes";
    var filhos = hAPI.getCardValue(tableName);

    if (filhos == null || filhos.size() == 0) {
        log.info("[fnCriarSubProcessos] Nenhum item na tabela " + tableName);
        return;
    }

    for (var i = 0; i < filhos.size(); i++) {
        try {
            var linha = filhos.get(i);
            var descricaoAcao = linha.get("acao_descricao");
            var responsavel = linha.get("acao_responsavel");

            if (descricaoAcao == null || descricaoAcao.trim().equals("")) {
                continue;
            }

            // Montar lista de responsaveis
            var userListSub = new java.util.ArrayList();
            userListSub.add(responsavel || colleagueId);

            // Montar dados do card do sub-processo
            var cardData = new java.util.HashMap();
            cardData.put("origem_processo", getValue("WKNumProces"));
            cardData.put("origem_atividade", getValue("WKNumState"));
            cardData.put("descricao_acao", descricaoAcao);
            cardData.put("responsavel", responsavel || "");
            cardData.put("prazo", linha.get("acao_prazo") || "");
            cardData.put("prioridade", linha.get("acao_prioridade") || "Normal");

            // Iniciar sub-processo
            var processId = "ecm_kgq_pa";  // codigo do processo Plano de Acao
            hAPI.startProcess(processId, 0, userListSub, cardData, false, false);

            log.info("[fnCriarSubProcessos] Sub-processo criado: " + processId
                + " | Acao: " + descricaoAcao
                + " | Responsavel: " + responsavel);

        } catch (e) {
            log.error("[fnCriarSubProcessos] Erro ao criar sub-processo item " + i + ": " + e.message);
        }
    }
}

/**
 * Envia e-mail de notificacao para o grupo "Qualidade"
 */
function fnEnviarNotificacao(colleagueId) {
    try {
        // Buscar membros do grupo
        var dsGrupo = DatasetFactory.getDataset(
            "colleagueGroup",
            null,
            [DatasetFactory.createConstraint("groupId", "Qualidade", "Qualidade", ConstraintType.MUST)],
            null
        );

        var destinatarios = new java.util.ArrayList();
        for (var i = 0; i < dsGrupo.rowsCount; i++) {
            destinatarios.add(dsGrupo.getValue(i, "colleagueId"));
        }

        if (destinatarios.size() == 0) {
            log.info("[fnEnviarNotificacao] Grupo 'Qualidade' sem membros");
            return;
        }

        // Montar parametros do e-mail
        var parametros = new java.util.HashMap();
        parametros.put("subject", "Planos de Acao criados — Ocorrencia " + getValue("WKNumProces"));
        parametros.put("NAME_PROCESS", "Registro de Ocorrencia");
        parametros.put("WDK_REQUESTER", colleagueId);
        parametros.put("NUMERO_PROCESSO", getValue("WKNumProces"));
        parametros.put("MENSAGEM", "Sub-processos de Plano de Acao foram criados para esta ocorrencia.");

        notifier.notify(
            colleagueId,      // remetente
            "aprovacao_acao", // template de e-mail
            parametros,       // parametros
            destinatarios,    // lista de destinatarios
            "text/html"       // tipo de conteudo
        );

        log.info("[fnEnviarNotificacao] E-mail enviado para " + destinatarios.size() + " destinatarios");

    } catch (e) {
        log.error("[fnEnviarNotificacao] Erro ao enviar notificacao: " + e.message);
    }
}
