// Hermes reply-brain as a Mastra workflow — drop-in for /root/hermes-router.py.
// Deterministic routing + LLM composition, same JSON contract. Visible in Studio,
// observable, scorer-ready. The CLI (mastra-router.ts) shares the same lib.
import { createStep, createWorkflow } from '@mastra/core/workflows';
import { z } from 'zod';
import { resolve } from '../lib/resolve';
import { getContext } from '../lib/hermesConfig';
import { compose } from '../lib/compose';

const inputSchema = z.object({
  sender: z.string().describe('WhatsApp sender id or phone number'),
  message: z.string().describe('Incoming message text'),
});

// Mirrors hermes-router.py output union.
const outputSchema = z.object({
  action: z.string(), // ignore | send_to_contact | draft_to_adrian | escalate_to_adrian
  tier: z.string().optional(),
  persona: z.string().optional(),
  reply: z.string().optional(),
  suggested: z.string().optional(),
  ok: z.boolean().optional(),
  ctx: z.string().optional(),
  reason: z.string().optional(),
  sender: z.string().optional(),
});

const routeStep = createStep({
  id: 'route',
  description: 'Resolve tier deterministically, then compose reply (drop-in for hermes-router.py).',
  inputSchema,
  outputSchema,
  execute: async ({ inputData }) => {
    const { sender, message } = inputData;
    const persona = resolve(sender);
    const tier = persona.tier;

    if (tier === 'block' || tier === 'ignore') {
      return { action: 'ignore', tier, sender };
    }

    const ctx = getContext();
    const { reply, ok } = await compose(persona, ctx, message || '(fara text)');

    if (tier === 'draft') {
      return { action: 'draft_to_adrian', persona: persona.name, suggested: reply, ok, ctx: ctx.time_window };
    }
    if (ok) {
      return { action: 'send_to_contact', persona: persona.name, reply, ctx: ctx.time_window };
    }
    return {
      action: 'escalate_to_adrian',
      persona: persona.name,
      reason: 'model output slab/degenerat - raspunde manual',
      ctx: ctx.time_window,
    };
  },
});

export const hermesReplyWorkflow = createWorkflow({
  id: 'hermes-reply-workflow',
  inputSchema,
  outputSchema,
}).then(routeStep);

hermesReplyWorkflow.commit();
