const NON_THEATRICAL_PATTERNS: RegExp[] = [
  /\b(opera|operatic|ballet|choreography|orchestra|symphony|philharmonic|concerto|recital)\b/i,
  /\b(live|encore|stage\s+production|concert\s+film|recorded\s+live)\b/i,
  /\b(act\s+[ivx]+|scene\s+\d+|intermission)\b/i,
];

export function isNonTheatricalTitle(title: string | null | undefined): boolean {
  if (!title) return false;
  const matches = NON_THEATRICAL_PATTERNS.reduce(
    (count, pattern) => count + (pattern.test(title) ? 1 : 0),
    0
  );
  return matches >= 2;
}

export function extractYear(date: string | null | undefined): number | null {
  if (!date || date.length < 4) return null;
  const year = Number.parseInt(date.slice(0, 4), 10);
  if (!Number.isInteger(year) || year < 1900 || year > 2100) return null;
  return year;
}

export function isRecentTheatricalYear(year: number | null, maxAgeYears = 3): boolean {
  if (!year) return false;
  const currentYear = new Date().getUTCFullYear();
  return year >= currentYear - maxAgeYears;
}
