/*
 * Copyright 2014-2021 Firestack, all rights reserved.
 */

export type PartialAny<T> = { [P in keyof T]?: any; };
export type PartialCustom<T, S> = { [P in keyof T]?: S; };

// tslint:disable-next-line: class-name
export type moref = string;

export const managedObjectProps = {
  Folder: ['childEntity', 'name', 'parent'],
  HostSystem: ['capability', 'config', 'configManager', 'datastore', 'hardware', 'licensableResource', 'name', 'network',
               'overallStatus', 'parent', 'runtime', 'summary', 'systemResources', 'vm'],
  Datacenter: ['datastore', 'datastoreFolder', 'hostFolder', 'name',  'network',  'networkFolder',  'parent', 'vmFolder'],
  Network: ['capability', 'extraConfig', 'host', 'name', 'overallStatus', 'parent', 'summary', 'vm'],
  Datastore: ['browser', 'capability', 'host', 'info', 'iormConfiguration', 'name', 'overallStatus', 'parent', 'summary', 'vm'],
  ComputeResource: ['configuration', 'datastore', 'drsFault', 'drsRecommendation', 'host', 'lifecycleManaged',
                    'migrationHistory', 'name', 'network', 'overallStatus', 'parent', 'recommendation', 'resourcePool', 'summary'],
  ResourcePool: ['childConfiguration', 'config', 'owner', 'resourcePool', 'runtime', 'summary', 'vm'],
  VirtualApp: ['childConfiguration', 'config', 'datastore', 'network', 'owner', 'parentFolder', 'parentVApp', 'resourcePool',
               'runtime', 'summary', 'vAppConfig', 'vm' ],
  VirtualMachine: ['capability', 'config', 'datastore', 'guest', 'guestHeartbeatStatus', 'layout', 'name', 'network',
                   'overallStatus', 'parent', 'resourceConfig', 'resourcePool', 'runtime', 'storage', 'summary' ],
  VirtualSwitch: ['capability', 'config', 'configStatus', 'name', 'overallStatus', 'parent', 'permission',
                  'portgroup', 'runtime', 'summary', 'uuid'],
};

export const managedObjectAlias = {
  DistributedVirtualSwitch: 'VirtualSwitch',
  VmwareDistributedVirtualSwitch: 'VirtualSwitch',
  DistributedVirtualPortgroup: 'Network',
  OpaqueNetwork: 'Network',
  ClusterComputeResource: 'ComputeResource',
};

export const managedObjectTypeReverseLookUp = {
  VirtualSwitch: 'DistributedVirtualSwitch',
};
