/**
 * validateForm.js — Solicitação de Compra
 * ============================================
 * Validação SERVER-SIDE executada antes de mover
 * a tarefa no workflow. Se lançar exceção, o Fluig
 * bloqueia o avanço e mostra a mensagem de erro.
 *
 * IMPORTANTE:
 * - Essa validação roda NO SERVIDOR (ES5 obrigatório)
 * - Use hAPI.getCardValue() para ler campos
 * - Use throw para bloquear com mensagem
 * - Valide POR ATIVIDADE usando WKNumState
 */

function validateForm(form) {
    var nAtiv = getValue('WKNumState');

    if (!nAtiv || nAtiv === '0') {
        return; // Sem atividade ativa, sem validação
    }

    nAtiv = parseInt(nAtiv, 10);

    switch (nAtiv) {
        case 2:
            validarSolicitacao(form);
            break;

        case 5:
            validarAprovacaoGestor(form);
            break;

        case 10:
            validarAprovacaoDiretor(form);
            break;
    }
}

// =============================================
// VALIDAÇÕES POR ATIVIDADE
// =============================================

/**
 * Atividade 2: Validar dados da solicitação.
 */
function validarSolicitacao(form) {
    var urgencia = hAPI.getCardValue('urgencia');
    var justificativa = hAPI.getCardValue('justificativa');
    var dataNecessidade = hAPI.getCardValue('data_necessidade');
    var centroCusto = hAPI.getCardValue('centro_custo');

    var erros = [];

    if (!urgencia || urgencia === '') {
        erros.push('O campo "Urgência" é obrigatório.');
    }

    if (!justificativa || justificativa.trim() === '') {
        erros.push('O campo "Justificativa" é obrigatório.');
    }

    if (!dataNecessidade || dataNecessidade === '') {
        erros.push('O campo "Data Necessidade" é obrigatório.');
    }

    if (!centroCusto || centroCusto === '') {
        erros.push('O campo "Centro de Custo" é obrigatório.');
    }

    // Validar se há pelo menos 1 item na tabela
    var primeiroItem = hAPI.getCardValue('item_descricao');
    if (!primeiroItem || primeiroItem.trim() === '') {
        erros.push('Adicione pelo menos um item à solicitação.');
    }

    if (erros.length > 0) {
        throw erros.join('\n');
    }
}

/**
 * Atividade 5: Validar aprovação do gestor.
 */
function validarAprovacaoGestor(form) {
    var aprovacao = hAPI.getCardValue('aprovacao_gestor');

    if (!aprovacao || aprovacao === '') {
        throw 'Selecione "Aprovar" ou "Reprovar" para continuar.';
    }
}

/**
 * Atividade 10: Validar aprovação do diretor.
 */
function validarAprovacaoDiretor(form) {
    var aprovacao = hAPI.getCardValue('aprovacao_diretor');

    if (!aprovacao || aprovacao === '') {
        throw 'Selecione "Aprovar" ou "Reprovar" para continuar.';
    }
}

// =============================================
// UTILITÁRIO
// =============================================

/**
 * getValue com fallback para variáveis de workflow.
 * Tenta hAPI primeiro, depois form.getValue.
 */
function getValue(campo) {
    try {
        return hAPI.getCardValue(campo);
    } catch (e) {
        return '';
    }
}
