// utils/normalizeAlertData.ts

const isNilObject = (obj: any) =>
  typeof obj === 'object' &&
  obj !== null &&
  obj['xsi:nil'] === 'true';

const isPlainObject = (val: any) =>
  typeof val === 'object' && val !== null && !Array.isArray(val);

const formatLabel = (key: string) =>
  key.replace(/([A-Z])/g, ' $1').trim();

/**
 * Extracts all meaningful values from a nested object
 */
const extractValues = (obj: Record<string, any>): string[] => {
  let values: string[] = [];

  for (const key in obj) {
    const val = obj[key];

    if (isNilObject(val) || val == null) continue;

    if (isPlainObject(val)) {
      values.push(...extractValues(val));
    } else {
      values.push(String(val));
    }
  }

  return values;
};

/**
 * MAIN NORMALIZER
 */
export function normalizeAlertData(
  data: Record<string, any>
): { label: string; value: string }[] {
  const rows: { label: string; value: string }[] = [];

  for (const key in data) {
    const value = data[key];

    if (isNilObject(value) || value == null) continue;

    // ✅ Primitive value
    if (!isPlainObject(value)) {
      rows.push({
        label: formatLabel(key),
        value: String(value),
      });
      continue;
    }

    // ✅ Object → collapse into single row
    const extracted = extractValues(value);

    if (extracted.length) {
      rows.push({
        label: formatLabel(key),
        value: extracted.join(', '),
      });
    }
  }

  return rows;
}
