import type { RouterModelRef, RouterScenariosConfig } from "../config/schema.js";
import type { RouterDecisionInput, RouterScenarioType } from "../protocol/decision.js";
import { detectSubagent } from "./subagentDetector.js";

export type ScenarioResolution = {
  scenarioType: RouterScenarioType;
  selection: RouterModelRef | undefined;
  isSubagent: boolean;
  subagentModelHint?: string;
};

export function decideScenario(
  input: RouterDecisionInput,
  scenarios: RouterScenariosConfig,
): ScenarioResolution {
  const { request, isMainAgent, metadata } = input;
  const explicit = readExplicit(input);
  if (explicit) {
    return {
      scenarioType: "explicit",
      selection: explicit,
      isSubagent: !isMainAgent,
    };
  }

  const subagent = detectSubagent(request.messages, request.tools, isMainAgent);

  if (subagent.modelHint) {
    return {
      scenarioType: "subagent",
      selection: undefined,
      isSubagent: true,
      subagentModelHint: subagent.modelHint,
    };
  }

  return {
    scenarioType: "default",
    selection: scenarios.default,
    isSubagent: subagent.isSubagent,
    subagentModelHint: subagent.modelHint,
  };
}

function readExplicit(input: RouterDecisionInput): RouterModelRef | undefined {
  const provider = input.metadata?.explicitProvider;
  const model = input.metadata?.explicitModel;
  if (provider && model) {
    return { id: `${provider}/${model}`, provider, model };
  }
  return undefined;
}