import { CONFIG_FIELD_KEYS } from 'src/common/constants/string-constants';

type JsonRecord = Record<string, any>;

export function getValidationDependsOn(config?: JsonRecord | null): any[] {
  if (!config || typeof config !== 'object') {
    return [];
  }
  const dependsOn = config[CONFIG_FIELD_KEYS.DEPENDS_ON];
  if (Array.isArray(dependsOn)) return dependsOn;
  if (dependsOn && typeof dependsOn === 'object') return [dependsOn];
  return [];
}

/**
 * Removes dependsOn entries (both show and prefill types) that reference
 * any binding key in excludedBindingKeys. Used when questions are excluded
 * from a form due to conditional_config not being met.
 */
export function stripExcludedDependsOn(
  config: JsonRecord | null | undefined,
  excludedBindingKeys: Set<string>,
): JsonRecord {
  if (!config || typeof config !== 'object') return {};
  if (!excludedBindingKeys.size) return config;

  const rawDependsOn = config[CONFIG_FIELD_KEYS.DEPENDS_ON];
  const dependsOn = Array.isArray(rawDependsOn)
    ? rawDependsOn
    : rawDependsOn && typeof rawDependsOn === 'object'
    ? [rawDependsOn]
    : null;
  if (!dependsOn) return config;

  const filtered = dependsOn.filter(
    (item: any) =>
      !item?.questionBindingKey || !excludedBindingKeys.has(item.questionBindingKey),
  );

  return { ...config, [CONFIG_FIELD_KEYS.DEPENDS_ON]: filtered };
}
