"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OutcomeSimulator = void 0;
class OutcomeSimulator {
    simulate(input) {
        const hasFallback = input.preferredExecutors.length > 1;
        if (input.governanceRisk === 'high') {
            return {
                predictedOutcome: 'blocked',
                recommendedPolicy: {
                    executionMode: 'balanced',
                    swarmMode: 'none',
                    maxBranches: 1,
                    rationale: 'Risco alto: reduzir superfície de execução e exigir trilha segura.'
                },
                recommendedExecutors: input.preferredExecutors,
                rationale: 'Pré-simulação prevê bloqueio/alto risco; rota conservadora aplicada.'
            };
        }
        if (!hasFallback) {
            return {
                predictedOutcome: 'partial',
                recommendedPolicy: {
                    ...input.basePolicy,
                    executionMode: 'balanced',
                    swarmMode: 'light',
                    maxBranches: Math.max(1, Math.min(input.basePolicy.maxBranches, 2)),
                    rationale: 'Sem fallback robusto: reduzir paralelismo e priorizar confiabilidade.'
                },
                recommendedExecutors: input.preferredExecutors,
                rationale: 'Pré-simulação detectou cadeia sem fallback; ajuste para reduzir falha total.'
            };
        }
        const recommendedExecutors = [...input.preferredExecutors].sort((a, b) => {
            const score = (x) => (x === 'codex' ? 3 : x === 'claude' ? 2 : 1);
            return score(b) - score(a);
        });
        return {
            predictedOutcome: 'success',
            recommendedPolicy: input.basePolicy,
            recommendedExecutors,
            rationale: 'Pré-simulação prevê alta chance de sucesso com fallback disponível.'
        };
    }
}
exports.OutcomeSimulator = OutcomeSimulator;
