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

import { apiAiGatewayCreateAiGatewayVirtualModelConfig } from "../funcs/apiAiGatewayCreateAiGatewayVirtualModelConfig.js";
import { apiAiGatewayDeleteAiGatewayVirtualModelConfig } from "../funcs/apiAiGatewayDeleteAiGatewayVirtualModelConfig.js";
import { apiAiGatewayDeleteAiGatewayVirtualModelConfigBySlug } from "../funcs/apiAiGatewayDeleteAiGatewayVirtualModelConfigBySlug.js";
import { apiAiGatewayGetAiGatewayVirtualModelConfig } from "../funcs/apiAiGatewayGetAiGatewayVirtualModelConfig.js";
import { apiAiGatewayGetAiGatewayVirtualModelConfigBySlug } from "../funcs/apiAiGatewayGetAiGatewayVirtualModelConfigBySlug.js";
import { apiAiGatewayListAiGatewayVirtualModelConfigs } from "../funcs/apiAiGatewayListAiGatewayVirtualModelConfigs.js";
import { apiAiGatewayUpdateAiGatewayVirtualModelConfig } from "../funcs/apiAiGatewayUpdateAiGatewayVirtualModelConfig.js";
import { apiAiGatewayUpdateAiGatewayVirtualModelConfigBySlug } from "../funcs/apiAiGatewayUpdateAiGatewayVirtualModelConfigBySlug.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import { AiGatewayVirtualModelConfig } from "../models/aigatewayvirtualmodelconfig.js";
import { AiGatewayVirtualModelConfigList } from "../models/aigatewayvirtualmodelconfiglist.js";
import { CreateAiGatewayVirtualModelConfigRequest } from "../models/createaigatewayvirtualmodelconfigop.js";
import { DeleteAiGatewayVirtualModelConfigBySlugRequest } from "../models/deleteaigatewayvirtualmodelconfigbyslugop.js";
import { DeleteAiGatewayVirtualModelConfigRequest } from "../models/deleteaigatewayvirtualmodelconfigop.js";
import { GetAiGatewayVirtualModelConfigBySlugRequest } from "../models/getaigatewayvirtualmodelconfigbyslugop.js";
import {
  GetAiGatewayVirtualModelConfigRequest,
  GetAiGatewayVirtualModelConfigResponseBody,
} from "../models/getaigatewayvirtualmodelconfigop.js";
import { ListAiGatewayVirtualModelConfigsRequest } from "../models/listaigatewayvirtualmodelconfigsop.js";
import { UpdateAiGatewayVirtualModelConfigBySlugRequest } from "../models/updateaigatewayvirtualmodelconfigbyslugop.js";
import { UpdateAiGatewayVirtualModelConfigRequest } from "../models/updateaigatewayvirtualmodelconfigop.js";
import { unwrapAsync } from "../types/fp.js";

export class ApiAiGateway extends ClientSDK {
  /**
   * Create virtual model config
   *
   * @remarks
   * Create a virtual model config (VMC)
   */
  async createAiGatewayVirtualModelConfig(
    request: CreateAiGatewayVirtualModelConfigRequest,
    options?: RequestOptions,
  ): Promise<AiGatewayVirtualModelConfig> {
    return unwrapAsync(apiAiGatewayCreateAiGatewayVirtualModelConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Get virtual model config
   *
   * @remarks
   * Get a virtual model config
   */
  async getAiGatewayVirtualModelConfig(
    request: GetAiGatewayVirtualModelConfigRequest,
    options?: RequestOptions,
  ): Promise<GetAiGatewayVirtualModelConfigResponseBody> {
    return unwrapAsync(apiAiGatewayGetAiGatewayVirtualModelConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Update virtual model config
   *
   * @remarks
   * Update a virtual model config
   */
  async updateAiGatewayVirtualModelConfig(
    request: UpdateAiGatewayVirtualModelConfigRequest,
    options?: RequestOptions,
  ): Promise<AiGatewayVirtualModelConfig> {
    return unwrapAsync(apiAiGatewayUpdateAiGatewayVirtualModelConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete virtual model config
   *
   * @remarks
   * Delete a virtual model config (soft delete)
   */
  async deleteAiGatewayVirtualModelConfig(
    request: DeleteAiGatewayVirtualModelConfigRequest,
    options?: RequestOptions,
  ): Promise<any> {
    return unwrapAsync(apiAiGatewayDeleteAiGatewayVirtualModelConfig(
      this,
      request,
      options,
    ));
  }

  /**
   * List virtual model configs
   *
   * @remarks
   * List virtual model configs. With `ownerId`, returns all of that team's VMCs. Without it, pages through VMCs across all teams (newest-first, `limit`/`cursor`).
   */
  async listAiGatewayVirtualModelConfigs(
    request: ListAiGatewayVirtualModelConfigsRequest,
    options?: RequestOptions,
  ): Promise<AiGatewayVirtualModelConfigList> {
    return unwrapAsync(apiAiGatewayListAiGatewayVirtualModelConfigs(
      this,
      request,
      options,
    ));
  }

  /**
   * Get virtual model config
   *
   * @remarks
   * Get a virtual model config by path slug
   */
  async getAiGatewayVirtualModelConfigBySlug(
    request: GetAiGatewayVirtualModelConfigBySlugRequest,
    options?: RequestOptions,
  ): Promise<AiGatewayVirtualModelConfig> {
    return unwrapAsync(apiAiGatewayGetAiGatewayVirtualModelConfigBySlug(
      this,
      request,
      options,
    ));
  }

  /**
   * Update virtual model config
   *
   * @remarks
   * Update a virtual model config by path slug
   */
  async updateAiGatewayVirtualModelConfigBySlug(
    request: UpdateAiGatewayVirtualModelConfigBySlugRequest,
    options?: RequestOptions,
  ): Promise<AiGatewayVirtualModelConfig> {
    return unwrapAsync(apiAiGatewayUpdateAiGatewayVirtualModelConfigBySlug(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete virtual model config
   *
   * @remarks
   * Delete a virtual model config by path slug (soft delete)
   */
  async deleteAiGatewayVirtualModelConfigBySlug(
    request: DeleteAiGatewayVirtualModelConfigBySlugRequest,
    options?: RequestOptions,
  ): Promise<any> {
    return unwrapAsync(apiAiGatewayDeleteAiGatewayVirtualModelConfigBySlug(
      this,
      request,
      options,
    ));
  }
}
