export function matchHookCondition(
  condition: string | undefined,
  input: { toolName?: string; toolInput?: unknown },
): boolean {
  if (!condition) {
    return true;
  }

  const parsed = /^([A-Za-z0-9_.:-]+)(?:\((.*)\))?$/.exec(condition.trim());
  if (!parsed) {
    return false;
  }

  const [, expectedTool, pattern] = parsed;
  if (expectedTool && input.toolName && !sameToolName(expectedTool, input.toolName)) {
    return false;
  }

  if (!pattern || pattern === "*") {
    return true;
  }

  return JSON.stringify(input.toolInput ?? {}).includes(pattern.replace(/\*/g, ""));
}

function sameToolName(left: string, right: string): boolean {
  return normalizeToolName(left) === normalizeToolName(right);
}

function normalizeToolName(value: string): string {
  return value.replace(/[^A-Za-z0-9]/g, "").toLowerCase();
}