import { PORTAL_HUMAN_REQUEST_PHRASE } from '@wa-ticketing/shared';

const DIRECT_HUMAN_PATTERNS: RegExp[] = [
  new RegExp(`^${escapeRegex(PORTAL_HUMAN_REQUEST_PHRASE)}\\.?$`, 'i'),
  /\b(speak|talk)\s+(to|with)\s+(a\s+)?(human|person|agent|someone|representative|operator)\b/i,
  /\b(real|live)\s+(person|agent|support|representative)\b/i,
  /\bhuman\s+(agent|support|please)\b/i,
  /\bneed\s+(a\s+)?human\b/i,
  /\bget\s+me\s+(a\s+)?(human|person|agent)\b/i,
  /\bconnect\s+me\s+(to|with)\s+(a\s+)?(human|agent|person)\b/i,
  /\bescalat(e|ion)\b/i,
];

const CONFIRM_YES_PATTERNS: RegExp[] = [
  /^(yes|yeah|yep|yup|sure|ok|okay|please|affirmative|correct)\.?$/i,
  /\b(yes|yeah)\s*(please|thanks|thank you)?\.?$/i,
  /\b(speak|talk)\s+(to|with)\s+(a\s+)?(human|person|agent)\b/i,
  /\bplease\s+(connect|escalate)\b/i,
];

const CONFIRM_NO_PATTERNS: RegExp[] = [
  /^(no|nope|nah|not now|never mind|nevermind)\.?$/i,
  /\bno\s+thanks?\b/i,
];

const UNABLE_TO_ASSIST_PATTERNS: RegExp[] = [
  /\bunable to assist\b/i,
  /\bcannot assist\b/i,
  /\bcan'?t assist\b/i,
  /\bnot covered\b/i,
  /\boutside those topics\b/i,
  /\bspeak to a human agent\b/i,
];

function escapeRegex(s: string): string {
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

export function matchesDirectHumanRequest(text: string): boolean {
  const t = text.trim();
  if (!t) return false;
  return DIRECT_HUMAN_PATTERNS.some(p => p.test(t));
}

export function matchesHumanConfirmYes(text: string): boolean {
  const t = text.trim();
  if (!t) return false;
  return CONFIRM_YES_PATTERNS.some(p => p.test(t));
}

export function matchesHumanConfirmNo(text: string): boolean {
  const t = text.trim();
  if (!t) return false;
  return CONFIRM_NO_PATTERNS.some(p => p.test(t));
}

export function isUnableToAssistReply(text: string): boolean {
  const t = text.trim();
  if (!t) return false;
  return UNABLE_TO_ASSIST_PATTERNS.some(p => p.test(t));
}
