/**
 * Proves the Prime Agent runtime against the real endpoint.
 *
 * A typecheck cannot tell you that the credential resolved, that the loader was
 * reloaded, or that no built-in tool survived `noTools: 'all'` — every one of
 * those failures compiles perfectly and shows up as a 401, a coding-assistant
 * answer, or a shell in a CRM. So this asks the live model a question with a
 * seeded tool behind it and prints what actually happened.
 *
 *   corepack pnpm -F @pig/piggy exec tsx src/dev/verify-prime-agent.ts [modelId]
 *
 * Requires PRIME_API_KEY. It spends a few hundred tokens; it is a dev tool, not
 * a test, and nothing in CI runs it.
 */
import { defineTool } from '@earendil-works/pi-coding-agent';
import { Type } from 'typebox';
import { createPiggySession } from '../agent/session';

const tool = defineTool({
  name: 'pig_get_workspace_summary',
  label: 'Workspace summary',
  description: 'Returns the workspace-wide capacity aggregates, already computed.',
  promptSnippet: 'pig_get_workspace_summary: workspace-wide capacity aggregates, already computed.',
  parameters: Type.Object({}),
  async execute() {
    console.log('    [tool] pig_get_workspace_summary called');
    return {
      content: [
        {
          type: 'text' as const,
          // The figures are chosen to catch the two failures that matter: 189
          // must be read as $1.89 and 112 as $1.12, not as "189" and "112
          // cents".
          text: JSON.stringify({
            headline: 'Northwind Robotics H100 block, 38% sold',
            committedGpuHours: 52_000,
            allocatedGpuHours: 19_760,
            utilisation: 0.38,
            costPerGpuHourCents: 189,
            breakEvenPriceCents: 112,
            idleCostCents: 1_200_000,
          }),
        },
      ],
      details: {},
    };
  },
});

const modelId = process.argv[2];
const piggy = await createPiggySession({
  mode: 'confirm',
  ...(modelId ? { modelId } : {}),
  tools: [tool],
});

const live = piggy.session.agent.state.tools.map((entry) => entry.name);
const shellish = live.filter((name) =>
  /^(bash|shell|ipython|python|read|write|edit|ls|grep|find)$/i.test(name),
);

console.log('MODEL:', piggy.modelId);
console.log('TOOLS:', live);
console.log('SHELL/PYTHON PRESENT:', shellish.length > 0);
console.log('SYSTEM PROMPT (first 200):', piggy.session.systemPrompt.slice(0, 200));
console.log('PROMPT LISTS THE TOOL:', piggy.session.systemPrompt.includes('pig_get_workspace_summary'));
console.log('PROMPT IS THE CODING PREAMBLE:', /coding assistant/i.test(piggy.session.systemPrompt));
console.log('---');

let answer = '';
const unsubscribe = piggy.session.subscribe((event) => {
  if (event.type === 'message_update' && event.assistantMessageEvent.type === 'text_delta') {
    answer += event.assistantMessageEvent.delta;
  }
  if (event.type === 'tool_execution_start') console.log('    [event] tool_execution_start');
});

await piggy.session.prompt(
  'What is the break-even price per GPU-hour on this block, and how much has the idle capacity already cost? Use the tool.',
);
await piggy.session.waitForIdle();
unsubscribe();

console.log('ANSWER:', answer.trim());
piggy.dispose();
process.exit(0);
