// Libs
// -----------------------------------------------------------------------------
import { RuleObject } from 'antd/lib/form';

/**
 * Проверить значение формы из нескольких IPv4 портов в виде JSON-массива чисел.
 * @param rule
 * @param value
 */
export const validateMultiplePortsAsJsonString = (
  rule: RuleObject,
  value: string,
): Promise<void> => {
  // Распарсить JSON-строку со списком портов
  let portsList;
  try {
    portsList = JSON.parse(value);
  } catch {
    return Promise.reject();
  }

  // Список должен быть массивом
  if (!Array.isArray(portsList)) {
    return Promise.reject();
  }

  // Проверить значения порта на корректность
  for (const port of portsList) {
    if (typeof port !== 'number' || port < 0 || port > 65535) {
      return Promise.reject();
    }
  }

  return Promise.resolve();
};
