/*
 * Copyright 2022 Google LLC
 *
 * Licensed 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.
 */

#include "authorizer_enums.h"

#include <algorithm>
#include <array>
#include <cstddef>
#include <iterator>
#include <string>

#include "absl/strings/string_view.h"

namespace ecclesia {

namespace {
constexpr std::array<absl::string_view,
                     static_cast<size_t>(ResourceEntity::kUndefined) + 1>
    kEntityNames = {
        // go/keep-sorted start
        "AccelerationFunction",
        "AccelerationFunctionCollection",
        "AccountService",
        "ActionInfo",
        "AddressPool",
        "AddressPoolCollection",
        "Aggregate",
        "AggregateCollection",
        "AggregationService",
        "AggregationSource",
        "AggregationSourceCollection",
        "AllowDeny",
        "AllowDenyCollection",
        "Assembly",
        "Battery",
        "BatteryCollection",
        "BatteryMetrics",
        "Bios",
        "BootOption",
        "BootOptionCollection",
        "CXLLogicalDevice",
        "CXLLogicalDeviceCollection",
        "Cable",
        "CableCollection",
        "Certificate",
        "CertificateCollection",
        "CertificateLocations",
        "CertificateService",
        "Chassis",
        "ChassisCollection",
        "Circuit",
        "CircuitCollection",
        "ComponentIntegrity",
        "ComponentIntegrityCollection",
        "CompositionReservation",
        "CompositionReservationCollection",
        "CompositionService",
        "ComputerSystem",
        "ComputerSystemCollection",
        "Connection",
        "ConnectionCollection",
        "ConnectionMethod",
        "ConnectionMethodCollection",
        "Control",
        "ControlCollection",
        "Drive",
        "DriveCollection",
        "Endpoint",
        "EndpointCollection",
        "EndpointGroup",
        "EndpointGroupCollection",
        "EnvironmentMetrics",
        "EthernetInterface",
        "EthernetInterfaceCollection",
        "EventDestination",
        "EventDestinationCollection",
        "EventService",
        "ExternalAccountProvider",
        "ExternalAccountProviderCollection",
        "Fabric",
        "FabricAdapter",
        "FabricAdapterCollection",
        "FabricCollection",
        "Facility",
        "FacilityCollection",
        "Fan",
        "FanCollection",
        "GoogleAsicErrorCounters",
        "GoogleAsicFleetCounters",
        "GoogleAsicHbmErrors",
        "GoogleAsicHbmPcr",
        "GoogleAsicHbmPpr",
        "GoogleAsicUtilization",
        "GoogleBareMetalInstance",
        "GoogleBootTime",
        "GoogleErrorCounter",
        "GoogleErrorCounterCollection",
        "GoogleHbmOnlineRepair",
        "GoogleHft",
        "GoogleManagedObjectStoreMetrics",
        "GoogleNvmeMetric",
        "GooglePower",
        "GooglePowerTpu",
        "GooglePowerTpuCollection",
        "GooglePowerVCore",
        "GooglePowerVCoreCollection",
        "GoogleProcessor",
        "GoogleRasService",
        "GooglegRPCStatistics",
        "GraphicsController",
        "GraphicsControllerCollection",
        "Heater",
        "HeaterCollection",
        "HeaterMetrics",
        "HostInterface",
        "HostInterfaceCollection",
        "Job",
        "JobCollection",
        "JobService",
        "JsonSchemaFile",
        "JsonSchemaFileCollection",
        "Key",
        "KeyCollection",
        "KeyPolicy",
        "KeyPolicyCollection",
        "KeyService",
        "LogEntry",
        "LogEntryCollection",
        "LogService",
        "LogServiceCollection",
        "Manager",
        "ManagerAccount",
        "ManagerAccountCollection",
        "ManagerCollection",
        "ManagerDiagnosticData",
        "ManagerNetworkProtocol",
        "MediaController",
        "MediaControllerCollection",
        "Memory",
        "MemoryChunks",
        "MemoryChunksCollection",
        "MemoryCollection",
        "MemoryDomain",
        "MemoryDomainCollection",
        "MemoryMetrics",
        "MessageRegistryFile",
        "MessageRegistryFileCollection",
        "MetricDefinition",
        "MetricDefinitionCollection",
        "MetricReport",
        "MetricReportCollection",
        "MetricReportDefinition",
        "MetricReportDefinitionCollection",
        "NVMe",
        "NVMeCollection",
        "NVMeController",
        "NVMeControllerCollection",
        "NetworkAdapter",
        "NetworkAdapterCollection",
        "NetworkAdapterMetrics",
        "NetworkDeviceFunction",
        "NetworkDeviceFunctionCollection",
        "NetworkDeviceFunctionMetrics",
        "NetworkInterface",
        "NetworkInterfaceCollection",
        "NetworkPort",
        "NetworkPortCollection",
        "NvidiaDebugToken",
        "NvidiaDebugTokenService",
        "NvidiaErrorInjection",
        "NvidiaHistogram",
        "NvidiaHistogramBucket",
        "NvidiaHistogramBuckets",
        "NvidiaHistogramCollection",
        "NvidiaPowerSmoothing",
        "NvidiaPowerSmoothingPresetProfile",
        "NvidiaPowerSmoothingPresetProfileCollection",
        "NvidiaRoTImageSlot",
        "NvidiaRoTImageSlotCollection",
        "NvidiaRoTProtectedComponent",
        "NvidiaRoTProtectedComponentCollection",
        "NvidiaRoTProtectedComponentSettings",
        "NvidiaSwitchPowerMode",
        "NvidiaWorkloadPower",
        "NvidiaWorkloadPowerProfile",
        "NvidiaWorkloadPowerProfileCollection",
        "OperatingConfig",
        "OperatingConfigCollection",
        "Outlet",
        "OutletCollection",
        "OutletGroup",
        "OutletGroupCollection",
        "PCIeDevice",
        "PCIeDeviceCollection",
        "PCIeFunction",
        "PCIeFunctionCollection",
        "PCIeSlots",
        "Port",
        "PortCollection",
        "PortMetrics",
        "PortSettings",
        "Power",
        "PowerDistribution",
        "PowerDistributionCollection",
        "PowerDistributionMetrics",
        "PowerDomain",
        "PowerDomainCollection",
        "PowerEquipment",
        "PowerSubsystem",
        "PowerSupply",
        "PowerSupplyCollection",
        "PowerSupplyMetrics",
        "PrivilegeRegistry",
        "Processor",
        "ProcessorCollection",
        "ProcessorMetrics",
        "ResourceBlock",
        "ResourceBlockCollection",
        "Role",
        "RoleCollection",
        "RootOfTrust",
        "RootOfTrustCollection",
        "RouteEntry",
        "RouteEntryCollection",
        "RouteSetEntry",
        "RouteSetEntryCollection",
        "SecureBoot",
        "SecureBootDatabase",
        "SecureBootDatabaseCollection",
        "Sensor",
        "SensorCollection",
        "SerialInterface",
        "SerialInterfaceCollection",
        "ServiceRoot",
        "Session",
        "SessionCollection",
        "SessionService",
        "Signature",
        "SignatureCollection",
        "SimpleStorage",
        "SimpleStorageCollection",
        "SoftwareInventory",
        "SoftwareInventoryCollection",
        "Storage",
        "StorageCollection",
        "StorageController",
        "StorageControllerCollection",
        "Switch",
        "SwitchCollection",
        "Task",
        "TaskCollection",
        "TaskService",
        "TelemetryService",
        "Thermal",
        "ThermalMetrics",
        "ThermalSubsystem",
        "TlBMCAllChassis",
        "TlBMCAllSensors",
        "TlBMCDebugApp",
        "TlBMCDebugEndpoint",
        "TlBMCDebugStore",
        "TlBMCMetrics",
        "TlBMCSchedulerStats",
        "TlBMCServiceRoot",
        "Triggers",
        "TriggersCollection",
        "TrustedComponent",
        "TrustedComponentCollection",
        "USBController",
        "USBControllerCollection",
        "UpdateService",
        "VCATEntry",
        "VCATEntryCollection",
        "VLanNetworkInterface",
        "VLanNetworkInterfaceCollection",
        "VirtualMedia",
        "VirtualMediaCollection",
        "Volume",
        "VolumeCollection",
        "Zone",
        "ZoneCollection",
        // go/keep-sorted end
        "Undefined",
};

constexpr std::array<absl::string_view, 7> kOperationNames = {
    "DELETE", "GET", "HEAD", "PATCH", "POST", "PUT", "Undefined"};

}  // namespace

std::string ResourceEntityToString(ResourceEntity entity) {
  static_assert(
      static_cast<int>(ResourceEntity::kUndefined) + 1 == kEntityNames.size(),
      "kEntityNames and ResourceEntity mismatch");
  return std::string(kEntityNames[static_cast<int>(entity)]);
}

std::string OperationToString(Operation operation) {
  static_assert(
      static_cast<int>(Operation::kUndefined) + 1 == kOperationNames.size(),
      "kOperationNames and Operation mismatch");
  return std::string(kOperationNames[static_cast<int>(operation)]);
}

ResourceEntity StringToResourceEntity(absl::string_view resource) {
  const auto *it = std::lower_bound(kEntityNames.cbegin(),
                                    std::prev(kEntityNames.cend()), resource);
  if (it == std::prev(kEntityNames.cend()) || *it != resource) {
    return ResourceEntity::kUndefined;
  }
  return static_cast<ResourceEntity>(std::distance(kEntityNames.cbegin(), it));
}

Operation StringToOperation(absl::string_view operation) {
  if (operation == "DELETE") {
    return Operation::kDelete;
  }
  if (operation == "GET") {
    return Operation::kGet;
  }
  if (operation == "HEAD") {
    return Operation::kHead;
  }
  if (operation == "PATCH") {
    return Operation::kPatch;
  }
  if (operation == "POST") {
    return Operation::kPost;
  }
  if (operation == "PUT") {
    return Operation::kPut;
  }
  return Operation::kUndefined;
}

}  // namespace ecclesia
