// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

import zones from '@/config/section/infra/zones'
import phynetworks from '@/config/section/infra/phynetworks'
import nsp from '@/config/section/infra/nsp'
import pods from '@/config/section/infra/pods'
import clusters from '@/config/section/infra/clusters'
import hosts from '@/config/section/infra/hosts'
import primaryStorages from '@/config/section/infra/primaryStorages'
import secondaryStorages from '@/config/section/infra/secondaryStorages'
import backupRepositories from '@/config/section/infra/backupRepositories'
import objectStorages from '@/config/section/infra/objectStorages'
import systemVms from '@/config/section/infra/systemVms'
import routers from '@/config/section/infra/routers'
import ilbvms from '@/config/section/infra/ilbvms'
import managementServers from '@/config/section/infra/managementServers'

export default {
  name: 'infra',
  title: 'label.infrastructure',
  icon: 'BankOutlined',
  permission: ['listInfrastructure'],
  children: [
    {
      name: 'infrasummary',
      title: 'label.summary',
      icon: 'ReadOutlined',
      permission: ['listInfrastructure'],
      component: () => import('@/views/infra/InfraSummary.vue')
    },
    zones,
    phynetworks,
    nsp,
    pods,
    clusters,
    hosts,
    primaryStorages,
    secondaryStorages,
    backupRepositories,
    objectStorages,
    systemVms,
    routers,
    ilbvms,
    managementServers,
    {
      name: 'cpusocket',
      title: 'label.cpu.sockets',
      icon: 'InboxOutlined',
      docHelp: 'adminguide/management.html#reporting-cpu-sockets',
      permission: ['listHosts'],
      component: () => import('@/views/infra/CpuSockets.vue')
    },
    {
      name: 'gpudevices',
      title: 'label.gpu.devices',
      icon: 'BoxPlotOutlined',
      hidden: true,
      permission: ['listGpuDevices'],
      columns: ['busaddress', 'gpucardname', 'vgpuprofilename', 'hostname', 'virtualmachinename'],
      details: ['id', 'busaddress', 'gpucardname', 'vgpuprofilename', 'hostname', 'virtualmachinename'],
      searchFilters: ['gpucardid', 'vgpuprofileid'],
      actions: [
        {
          api: 'deleteGpuDevice',
          icon: 'delete-outlined',
          label: 'label.delete.gpu.device',
          dataView: true,
          popup: true,
          groupAction: true,
          groupMap: (selection) => { return selection.map(x => { return { id: x.id } }) }
        }
      ]
    },
    {
      name: 'metric',
      title: 'label.db.usage.metrics',
      icon: 'bar-chart-outlined',
      docHelp: 'adminguide/management.html#metrics',
      permission: ['listDbMetrics', 'listUsageServerMetrics'],
      component: () => import('@/views/infra/Metrics.vue')
    },
    {
      name: 'alert',
      title: 'label.alerts',
      icon: 'FlagOutlined',
      docHelp: 'adminguide/management.html#administrator-alerts',
      permission: ['listAlerts'],
      columns: ['name', 'description', 'type', 'sent'],
      details: ['name', 'id', 'type', 'sent', 'description'],
      searchFilters: ['name', 'type'],
      actions: [
        {
          api: 'archiveAlerts',
          icon: 'book-outlined',
          label: 'label.archive.alerts',
          message: 'message.confirm.archive.selected.alerts',
          docHelp: 'adminguide/events.html#deleting-and-archiving-events-and-alerts',
          dataView: true,
          groupAction: true,
          groupMap: (selection) => { return [{ ids: selection.join(',') }] },
          args: ['ids'],
          mapping: {
            ids: {
              value: (record) => { return record.id }
            }
          }
        },
        {
          api: 'deleteAlerts',
          icon: 'delete-outlined',
          label: 'label.delete.alerts',
          message: 'message.confirm.remove.selected.alerts',
          docHelp: 'adminguide/events.html#deleting-and-archiving-events-and-alerts',
          dataView: true,
          groupAction: true,
          groupMap: (selection) => { return [{ ids: selection.join(',') }] },
          args: ['ids'],
          mapping: {
            ids: {
              value: (record) => { return record.id }
            }
          }
        }
      ]
    }
  ]
}
