/**
 * Normalize client WebSocket payloads.
 *
 * iOS and legacy Python clients often send IDs as plain strings in `message`,
 * while newer Android/TypeScript clients send structured objects.
 */
export function resolvePayloadId(payload: unknown, ...keys: string[]): string | undefined {
  if (typeof payload === 'string') {
    return payload;
  }

  if (payload && typeof payload === 'object') {
    const obj = payload as Record<string, unknown>;
    for (const key of keys) {
      const value = obj[key];
      if (typeof value === 'string' && value.length > 0) {
        return value;
      }
    }
  }

  return undefined;
}

export function resolvePayloadField(payload: unknown, ...keys: string[]): string | undefined {
  return resolvePayloadId(payload, ...keys);
}

export function resolvePayloadNumber(payload: unknown, ...keys: string[]): number | undefined {
  if (typeof payload === 'number' && Number.isFinite(payload)) {
    return payload;
  }

  if (payload && typeof payload === 'object') {
    const obj = payload as Record<string, unknown>;
    for (const key of keys) {
      const value = obj[key];
      if (typeof value === 'number' && Number.isFinite(value)) {
        return value;
      }
      if (typeof value === 'string' && value.trim().length > 0) {
        const parsed = Number(value);
        if (Number.isFinite(parsed)) {
          return parsed;
        }
      }
    }
  }

  return undefined;
}
