/**
 * Frontend-side variable substitution for display during navigation.
 *
 * - [VAR:name] → replaced with variables[name]
 * - [USER_INPUT:prompt] → replaced with variables[prompt]
 * - [SAVE_AS:name] → removed from display
 */
export function resolveVariables(text: string, variables: Record<string, string>): string {
  // Replace [VAR:name] — empty/missing values show "N/A"
  let result = text.replace(/\[VAR:([^\]]+)\]/g, (_, name) => {
    const key = name.trim()
    const value = variables[key]
    return value && value.trim() ? value : 'N/A'
  })

  // Replace [USER_INPUT:prompt]
  result = result.replace(/\[USER_INPUT:([^\]]+)\]/g, (_, prompt) => {
    const key = prompt.trim()
    const value = variables[key]
    return value && value.trim() ? value : 'N/A'
  })

  // Remove [SAVE_AS:name]
  result = result.replace(/\[SAVE_AS:[^\]]+\]/g, '')

  return result
}

/**
 * Extract all [USER_INPUT:prompt] tokens from text.
 * Returns array of prompt strings.
 */
export function extractUserInputPrompts(text: string): string[] {
  const prompts: string[] = []
  const re = /\[USER_INPUT:([^\]]+)\]/g
  let match
  while ((match = re.exec(text)) !== null) {
    const prompt = match[1].trim()
    if (!prompts.includes(prompt)) {
      prompts.push(prompt)
    }
  }
  return prompts
}

/**
 * Check if text contains any variable tokens.
 */
export function hasVariableTokens(text: string): boolean {
  return /\[(USER_INPUT|VAR|SAVE_AS):[^\]]+\]/.test(text)
}
