#!/usr/bin/env node
/**
 * judge-gate-config — рубильник судьи (как resolveJudgeConfig у llm-judge v4).
 * Судья АКТИВЕН только если владелец включил флаг ROUTER_MENTOR_JUDGE_ENABLED=1 И
 * ключ судьи доступен. Без флага/ключа — инертен, $0, ничего не блокирует (режим D28
 * «сперва тихо»). Регистрация хука в settings.json + флаг + ключ — шаг ВЛАДЕЛЬЦА.
 */
import { resolveJudgeKey } from './judge-key-config.mjs';

const ENABLED_ENV = 'ROUTER_MENTOR_JUDGE_ENABLED';

export function resolveJudgeEnabled({ env = process.env } = {}) {
  return env[ENABLED_ENV] === '1';
}

export function judgeActive({ env = process.env, keychainGet } = {}) {
  if (!resolveJudgeEnabled({ env })) return false;
  return !!resolveJudgeKey({ env, keychainGet });
}

/** «Оба строго» (решение владельца 2026-06-12): LLM-ключ судьи — ТОЛЬКО свой
 *  ROUTER_JUDGE_LLM_KEY; общий ROUTER_LLM_KEY НЕ фолбэк (разделение счетов).
 *  Нет ключа → null → callJudgeModel вернёт unavailable (degraded, не NO-GO). */
export function resolveJudgeLlmKey({ env = process.env } = {}) {
  return env.ROUTER_JUDGE_LLM_KEY || null;
}

const MODE_ENV = 'ROUTER_MENTOR_JUDGE_MODE'; // 'shadow' (default) | 'block'

/**
 * Режим судьи: inert ($0, нет флага/ключа) / shadow (active, логирует, НЕ блокирует — D28
 * «сперва тихо») / live-block (active + MODE=block, блокирует на NO-GO). Рубильник (judgeActive)
 * важнее режима: MODE=block без флага/ключа → всё равно inert. Default при активации — shadow
 * (рекомендуемая обкатка §11; владелец переводит в block отдельным шагом).
 */
export function judgeGateMode({ env = process.env, keychainGet } = {}) {
  if (!judgeActive({ env, keychainGet })) return 'inert';
  return env[MODE_ENV] === 'block' ? 'live-block' : 'shadow';
}

export const _internals = { ENABLED_ENV, MODE_ENV };
