/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import { globalConfigCreateEdgeConfig } from "../funcs/globalConfigCreateEdgeConfig.js";
import { globalConfigCreateEdgeConfigToken } from "../funcs/globalConfigCreateEdgeConfigToken.js";
import { globalConfigDeleteEdgeConfig } from "../funcs/globalConfigDeleteEdgeConfig.js";
import { globalConfigDeleteEdgeConfigSchema } from "../funcs/globalConfigDeleteEdgeConfigSchema.js";
import { globalConfigDeleteEdgeConfigTokens } from "../funcs/globalConfigDeleteEdgeConfigTokens.js";
import { globalConfigGetEdgeConfig } from "../funcs/globalConfigGetEdgeConfig.js";
import { globalConfigGetEdgeConfigBackup } from "../funcs/globalConfigGetEdgeConfigBackup.js";
import { globalConfigGetEdgeConfigBackups } from "../funcs/globalConfigGetEdgeConfigBackups.js";
import { globalConfigGetEdgeConfigItem } from "../funcs/globalConfigGetEdgeConfigItem.js";
import { globalConfigGetEdgeConfigItems } from "../funcs/globalConfigGetEdgeConfigItems.js";
import { globalConfigGetEdgeConfigs } from "../funcs/globalConfigGetEdgeConfigs.js";
import { globalConfigGetEdgeConfigSchema } from "../funcs/globalConfigGetEdgeConfigSchema.js";
import { globalConfigGetEdgeConfigToken } from "../funcs/globalConfigGetEdgeConfigToken.js";
import { globalConfigGetEdgeConfigTokens } from "../funcs/globalConfigGetEdgeConfigTokens.js";
import { globalConfigPatchEdgeConfigSchema } from "../funcs/globalConfigPatchEdgeConfigSchema.js";
import { globalConfigRestoreEdgeConfigBackup } from "../funcs/globalConfigRestoreEdgeConfigBackup.js";
import { globalConfigUpdateEdgeConfig } from "../funcs/globalConfigUpdateEdgeConfig.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import {
  CreateEdgeConfigRequest,
  CreateEdgeConfigResponseBody,
} from "../models/createedgeconfigop.js";
import {
  CreateEdgeConfigTokenRequest,
  CreateEdgeConfigTokenResponseBody,
} from "../models/createedgeconfigtokenop.js";
import { DeleteEdgeConfigRequest } from "../models/deleteedgeconfigop.js";
import { DeleteEdgeConfigSchemaRequest } from "../models/deleteedgeconfigschemaop.js";
import { DeleteEdgeConfigTokensRequest } from "../models/deleteedgeconfigtokensop.js";
import {
  GetEdgeConfigBackupRequest,
  GetEdgeConfigBackupResponseBody,
} from "../models/getedgeconfigbackupop.js";
import {
  GetEdgeConfigBackupsRequest,
  GetEdgeConfigBackupsResponseBody,
} from "../models/getedgeconfigbackupsop.js";
import { GetEdgeConfigItemRequest } from "../models/getedgeconfigitemop.js";
import { GetEdgeConfigItemsRequest } from "../models/getedgeconfigitemsop.js";
import {
  GetEdgeConfigRequest,
  GetEdgeConfigResponseBody,
} from "../models/getedgeconfigop.js";
import {
  GetEdgeConfigSchemaRequest,
  GetEdgeConfigSchemaResponseBody,
} from "../models/getedgeconfigschemaop.js";
import {
  GetEdgeConfigsRequest,
  GetEdgeConfigsResponseBody,
} from "../models/getedgeconfigsop.js";
import { GetEdgeConfigTokenRequest } from "../models/getedgeconfigtokenop.js";
import { GetEdgeConfigTokensRequest } from "../models/getedgeconfigtokensop.js";
import { GlobalConfigItem } from "../models/globalconfigitem.js";
import { GlobalConfigToken } from "../models/globalconfigtoken.js";
import {
  PatchEdgeConfigSchemaRequest,
  PatchEdgeConfigSchemaResponseBody,
} from "../models/patchedgeconfigschemaop.js";
import {
  RestoreEdgeConfigBackupRequest,
  RestoreEdgeConfigBackupResponseBody,
} from "../models/restoreedgeconfigbackupop.js";
import {
  UpdateEdgeConfigRequest,
  UpdateEdgeConfigResponseBody,
} from "../models/updateedgeconfigop.js";
import { unwrapAsync } from "../types/fp.js";

export class GlobalConfig extends ClientSDK {
  /**
   * Get Global Configs
   *
   * @remarks
   * Returns all Global Configs.
   */
  async getEdgeConfigs(
    request: GetEdgeConfigsRequest,
    options?: RequestOptions,
  ): Promise<GetEdgeConfigsResponseBody> {
    return unwrapAsync(globalConfigGetEdgeConfigs(
      this,
      request,
      options,
    ));
  }

  /**
   * Create a Global Config
   *
   * @remarks
   * Creates a Global Config.
   */
  async createEdgeConfig(
    request: CreateEdgeConfigRequest,
    options?: RequestOptions,
  ): Promise<CreateEdgeConfigResponseBody> {
    return unwrapAsync(globalConfigCreateEdgeConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Get a Global Config
   *
   * @remarks
   * Returns a Global Config.
   */
  async getEdgeConfig(
    request: GetEdgeConfigRequest,
    options?: RequestOptions,
  ): Promise<GetEdgeConfigResponseBody> {
    return unwrapAsync(globalConfigGetEdgeConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Update a Global Config
   *
   * @remarks
   * Updates a Global Config.
   */
  async updateEdgeConfig(
    request: UpdateEdgeConfigRequest,
    options?: RequestOptions,
  ): Promise<UpdateEdgeConfigResponseBody> {
    return unwrapAsync(globalConfigUpdateEdgeConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete a Global Config
   *
   * @remarks
   * Delete a Global Config by id.
   */
  async deleteEdgeConfig(
    request: DeleteEdgeConfigRequest,
    options?: RequestOptions,
  ): Promise<void> {
    return unwrapAsync(globalConfigDeleteEdgeConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Get Global Config items
   *
   * @remarks
   * Returns all items of a Global Config.
   */
  async getEdgeConfigItems(
    request: GetEdgeConfigItemsRequest,
    options?: RequestOptions,
  ): Promise<Array<GlobalConfigItem>> {
    return unwrapAsync(globalConfigGetEdgeConfigItems(
      this,
      request,
      options,
    ));
  }

  /**
   * Get Global Config schema
   *
   * @remarks
   * Returns the schema of a Global Config.
   */
  async getEdgeConfigSchema(
    request: GetEdgeConfigSchemaRequest,
    options?: RequestOptions,
  ): Promise<GetEdgeConfigSchemaResponseBody> {
    return unwrapAsync(globalConfigGetEdgeConfigSchema(
      this,
      request,
      options,
    ));
  }

  /**
   * Update Global Config schema
   *
   * @remarks
   * Update a Global Config's schema.
   */
  async patchEdgeConfigSchema(
    request: PatchEdgeConfigSchemaRequest,
    options?: RequestOptions,
  ): Promise<PatchEdgeConfigSchemaResponseBody> {
    return unwrapAsync(globalConfigPatchEdgeConfigSchema(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete a Global Config's schema
   *
   * @remarks
   * Deletes the schema of existing Global Config.
   */
  async deleteEdgeConfigSchema(
    request: DeleteEdgeConfigSchemaRequest,
    options?: RequestOptions,
  ): Promise<void> {
    return unwrapAsync(globalConfigDeleteEdgeConfigSchema(
      this,
      request,
      options,
    ));
  }

  /**
   * Get a Global Config item
   *
   * @remarks
   * Returns a specific Global Config Item.
   */
  async getEdgeConfigItem(
    request: GetEdgeConfigItemRequest,
    options?: RequestOptions,
  ): Promise<GlobalConfigItem> {
    return unwrapAsync(globalConfigGetEdgeConfigItem(
      this,
      request,
      options,
    ));
  }

  /**
   * Get all tokens of a Global Config
   *
   * @remarks
   * Returns all tokens of a Global Config.
   */
  async getEdgeConfigTokens(
    request: GetEdgeConfigTokensRequest,
    options?: RequestOptions,
  ): Promise<GlobalConfigToken> {
    return unwrapAsync(globalConfigGetEdgeConfigTokens(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete one or more Global Config tokens
   *
   * @remarks
   * Deletes one or more tokens of an existing Global Config.
   */
  async deleteEdgeConfigTokens(
    request: DeleteEdgeConfigTokensRequest,
    options?: RequestOptions,
  ): Promise<void> {
    return unwrapAsync(globalConfigDeleteEdgeConfigTokens(
      this,
      request,
      options,
    ));
  }

  /**
   * Get Global Config token meta data
   *
   * @remarks
   * Return meta data about a Global Config token.
   */
  async getEdgeConfigToken(
    request: GetEdgeConfigTokenRequest,
    options?: RequestOptions,
  ): Promise<GlobalConfigToken> {
    return unwrapAsync(globalConfigGetEdgeConfigToken(
      this,
      request,
      options,
    ));
  }

  /**
   * Create a Global Config token
   *
   * @remarks
   * Adds a token to an existing Global Config.
   */
  async createEdgeConfigToken(
    request: CreateEdgeConfigTokenRequest,
    options?: RequestOptions,
  ): Promise<CreateEdgeConfigTokenResponseBody> {
    return unwrapAsync(globalConfigCreateEdgeConfigToken(
      this,
      request,
      options,
    ));
  }

  /**
   * Get Global Config backup
   *
   * @remarks
   * Retrieves a specific version of a Global Config from backup storage.
   */
  async getEdgeConfigBackup(
    request: GetEdgeConfigBackupRequest,
    options?: RequestOptions,
  ): Promise<GetEdgeConfigBackupResponseBody> {
    return unwrapAsync(globalConfigGetEdgeConfigBackup(
      this,
      request,
      options,
    ));
  }

  /**
   * Restore Global Config backup
   *
   * @remarks
   * Restores a Global Config backup.
   */
  async restoreEdgeConfigBackup(
    request: RestoreEdgeConfigBackupRequest,
    options?: RequestOptions,
  ): Promise<RestoreEdgeConfigBackupResponseBody> {
    return unwrapAsync(globalConfigRestoreEdgeConfigBackup(
      this,
      request,
      options,
    ));
  }

  /**
   * Get Global Config backups
   *
   * @remarks
   * Returns backups of a Global Config.
   */
  async getEdgeConfigBackups(
    request: GetEdgeConfigBackupsRequest,
    options?: RequestOptions,
  ): Promise<GetEdgeConfigBackupsResponseBody> {
    return unwrapAsync(globalConfigGetEdgeConfigBackups(
      this,
      request,
      options,
    ));
  }
}
