import type { ForgeTask, ForgeTaskResult, TaskExecutor } from './types.js';

/**
 * Simulated executor — used ONLY when the caller explicitly passes --simulate.
 *
 * It submits no real work and returns typed `simulated` results so a simulated
 * run can never be confused with a verified one. In normal mode (no --simulate)
 * the CLI refuses to run at all with FORGE_NO_EXECUTOR instead of wiring this
 * stub (fail closed, SDLC-D-035).
 */
export function createSimulatedExecutor(options?: { log?: boolean }): TaskExecutor {
  const log = options?.log ?? true;
  return {
    async submitTask(task: ForgeTask) {
      if (log) console.log(`  [forge:simulated] stage submitted: ${task.id} (${task.title})`);
    },
    async waitForCompletion(taskId: string): Promise<ForgeTaskResult> {
      if (log) console.log(`  [forge:simulated] stage complete:  ${taskId}`);
      return {
        task_id: taskId,
        outcome: 'simulated',
        reason: 'no executor wired; simulated execution requested via --simulate',
        completed_at: new Date().toISOString(),
        exit_code: 0,
        gate_results: [],
      };
    },
    async getTaskStatus() {
      return 'completed' as const;
    },
  };
}
