import { getPayPalConfig } from './index';

export interface PayPalValidationResult {
  ok: boolean;
  missing: string[];
  warnings: string[];
  mode?: string;
}

interface ResolvedPayPalConfig {
  clientId: string;
  clientSecret: string;
  webhookId: string;
  mode: 'sandbox' | 'live';
}

const VALID_MODES = new Set(['sandbox', 'live']);

export function validatePayPalConfig(
  resolveConfig: () => ResolvedPayPalConfig = getPayPalConfig
): PayPalValidationResult {
  let resolved: ResolvedPayPalConfig;
  try {
    resolved = resolveConfig();
  } catch {
    return { ok: false, missing: ['paypalCredentials'], warnings: [] };
  }

  const missing: string[] = [];
  if (!resolved.clientId?.trim()) missing.push('paypalClientId');
  if (!resolved.clientSecret?.trim()) missing.push('paypalClientSecret');
  if (!resolved.webhookId?.trim()) missing.push('paypalWebhookId');
  if (!VALID_MODES.has(resolved.mode)) missing.push('paypalMode');

  return {
    ok: missing.length === 0,
    missing,
    warnings: [],
    ...(missing.length === 0 ? { mode: resolved.mode } : {}),
  };
}
