/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

import stripAnsi from 'strip-ansi';

export function checkInput(input: string | null | undefined): boolean {
  if (input === null || input === undefined) {
    return false;
  }

  const trimmed = input.trim();
  if (!trimmed) {
    return false;
  }

  if (!/^(?:\[|\{)/.test(trimmed)) {
    return false;
  }

  if (stripAnsi(trimmed) !== trimmed) return false;

  return true;
}

export function tryParseJSON(input: string): object | null {
  if (!checkInput(input)) return null;
  const trimmed = input.trim();
  try {
    const parsed: unknown = JSON.parse(trimmed);
    if (parsed === null || typeof parsed !== 'object') {
      return null;
    }
    if (Array.isArray(parsed) && parsed.length === 0) {
      return null;
    }

    if (!Array.isArray(parsed) && Object.keys(parsed).length === 0) return null;

    return parsed;
  } catch {
    return null;
  }
}
