function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
import { normalizeText } from "./constants";

/** 型号选择页展示用分组：一个设备类型下包含多个可选型号。 */

/** 按 IoT endpoint 过滤型号，并丢弃没有可用型号的设备类型。 */
export var createDeviceTypeGroups = function createDeviceTypeGroups() {
  var types = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  var iotEndpoint = arguments.length > 1 ? arguments[1] : undefined;
  return types.map(function (type) {
    return {
      type: type,
      models: _toConsumableArray(type.active_models || []).filter(function (model) {
        var _model$data;
        return iotEndpoint ? ((_model$data = model.data) === null || _model$data === void 0 ? void 0 : _model$data.endpoint) === iotEndpoint : true;
      }).sort(function (a, b) {
        return (a.sort || 0) - (b.sort || 0);
      })
    };
  }).filter(function (group) {
    return group.models.length > 0;
  });
};

/** 汇总型号详情和设备列表中的 profile 名称，供设备行展示使用。 */
export var createProfileNameMap = function createProfileNameMap(modelDetail, devices, translation) {
  var map = new Map();
  ((modelDetail === null || modelDetail === void 0 ? void 0 : modelDetail.active_profiles) || []).forEach(function (profile) {
    map.set(profile.id, translation(profile.name) || String(profile.id));
  });
  devices.forEach(function (device) {
    var _device$profile;
    if ((_device$profile = device.profile) !== null && _device$profile !== void 0 && _device$profile.id) {
      map.set(device.profile.id, translation(device.profile.name) || String(device.profile.id));
    }
  });
  return map;
};

/** 设备行适配参数，包含原始设备、展示上下文和本地设备状态。 */

/** 将接口返回的 DeviceItem 转为列表展示用 DeviceRow，并应用客户端搜索。 */
export var createDeviceRows = function createDeviceRows(_ref) {
  var devices = _ref.devices,
    search = _ref.search,
    storedIotDevice = _ref.storedIotDevice,
    deviceTypeName = _ref.deviceTypeName,
    modelName = _ref.modelName,
    profileNameMap = _ref.profileNameMap,
    translation = _ref.translation;
  var keyword = normalizeText(search);
  // 如果当前设备仍在列表中，则不再额外标记 Last Used。
  var hasCurrentDevice = devices.some(function (item) {
    return storedIotDevice.number && item.number && storedIotDevice.number === String(item.number);
  });
  return devices.map(function (item) {
    var _item$type, _item$model, _item$profile;
    var name = translation(item.name);
    var typeName = translation((_item$type = item.type) === null || _item$type === void 0 ? void 0 : _item$type.name) || deviceTypeName;
    var modelDisplayName = translation((_item$model = item.model) === null || _item$model === void 0 ? void 0 : _item$model.name) || modelName;
    var linkStatus = item.link || 'unlinked';
    // 当前设备按 number 判断，因为 App storage 中的当前设备可能没有稳定 id。
    var isCurrent = Boolean(storedIotDevice.number && item.number && storedIotDevice.number === String(item.number));
    var profileName = translation((_item$profile = item.profile) === null || _item$profile === void 0 ? void 0 : _item$profile.name) || (item.profile_id ? profileNameMap.get(item.profile_id) : '') || (item.profile_id ? String(item.profile_id) : '-');
    return {
      id: item.id,
      name: name,
      typeName: typeName,
      modelName: modelDisplayName,
      profileName: profileName,
      link: linkStatus,
      status: linkStatus === 'linked' ? item.status || 'offline' : 'unknown',
      typeCode: item.type_code,
      modelCode: item.model_code,
      isCurrent: isCurrent,
      // 没有当前设备命中时，才按上次使用 id 标记 Last Used。
      isLastUsed: Boolean(!hasCurrentDevice && storedIotDevice.id !== undefined && String(storedIotDevice.id) === String(item.id)),
      _raw: item
    };
  }).filter(function (item) {
    return keyword ? [item.name, item.typeName, item.modelName, item.profileName, item._raw.workarea ? translation(item._raw.workarea.name) : ''].some(function (value) {
      return normalizeText(value || '').includes(keyword);
    }) : true;
  });
};