/**
 * TEMPLATE: afterSaveNew-base.js
 * =============================================
 * Evento SERVER-SIDE executado apos o primeiro
 * save de um novo registro (card).
 *
 * QUANDO USAR:
 * - Inserir dados em banco externo (RM, Protheus)
 * - Sincronizar com ERP apos criacao
 * - Criar registros em tabelas auxiliares
 *
 * PADRAO DE PRODUCAO (CELI, Integracao RM):
 * 1. Ler dados do formulario via hAPI.getCardValue()
 * 2. Montar constraints com os dados
 * 3. Chamar dataset de integracao
 * 4. Tratar erros com try/catch
 *
 * IMPORTANTE:
 * - Roda NO SERVIDOR (ES5 obrigatorio)
 * - Usa hAPI.getCardValue() (NAO form.getValue)
 * - Erros devem ser logados e tratados
 */

function afterSaveNew(documentId, version, cardId) {

    log.info("=== afterSaveNew - documentId: " + documentId + " cardId: " + cardId);

    try {
        // Ler dados do formulario
        var campo1 = hAPI.getCardValue("${CAMPO_1}");
        var campo2 = hAPI.getCardValue("${CAMPO_2}");
        var campo3 = hAPI.getCardValue("${CAMPO_3}");

        // Converter data se necessario (BR -> EN para banco)
        var dataStr = hAPI.getCardValue("${CAMPO_DATA}");
        if (dataStr != null && dataStr != "") {
            var partes = dataStr.split("/");
            dataStr = partes[2] + "-" + partes[1] + "-" + partes[0];
        }

        // Montar constraints para o dataset de integracao
        var c1 = DatasetFactory.createConstraint("campo1", campo1, campo1, ConstraintType.MUST);
        var c2 = DatasetFactory.createConstraint("campo2", campo2, campo2, ConstraintType.MUST);
        var c3 = DatasetFactory.createConstraint("campo3", campo3, campo3, ConstraintType.MUST);
        var c4 = DatasetFactory.createConstraint("data", dataStr, dataStr, ConstraintType.MUST);

        // Chamar dataset que faz o INSERT no sistema externo
        var ds = DatasetFactory.getDataset(
            "${DS_INSERT}",
            null,
            new Array(c1, c2, c3, c4),
            null
        );

        if (ds == null || ds.rowsCount == 0) {
            log.error("=== afterSaveNew - Dataset nao retornou dados");
        } else {
            log.info("=== afterSaveNew - Registro inserido com sucesso");
        }

    } catch (e) {
        log.error("=== afterSaveNew - ERRO: " + e.message);
        // Descomente para bloquear o save em caso de erro:
        // throw "Erro ao integrar com sistema externo: " + e.message;
    }
}

/**
 * afterSaveUpdate - Executado apos atualizar registro existente.
 * Mesma estrutura do afterSaveNew.
 * Descomente se necessario.
 */
// function afterSaveUpdate(documentId, version, cardId) {
//     log.info("=== afterSaveUpdate - documentId: " + documentId);
//     // Mesma logica do afterSaveNew, mas para atualizacao
// }
