/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 * @generated-id: 4cc54a0b1347
 */

import { betaObservabilityJudgesCreate } from "../funcs/betaObservabilityJudgesCreate.js";
import { betaObservabilityJudgesDelete } from "../funcs/betaObservabilityJudgesDelete.js";
import { betaObservabilityJudgesFetch } from "../funcs/betaObservabilityJudgesFetch.js";
import { betaObservabilityJudgesList } from "../funcs/betaObservabilityJudgesList.js";
import { betaObservabilityJudgesUpdate } from "../funcs/betaObservabilityJudgesUpdate.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import * as components from "../models/components/index.js";
import * as operations from "../models/operations/index.js";
import { unwrapAsync } from "../types/fp.js";

export class Judges extends ClientSDK {
  /**
   * Create a new judge
   */
  async create(
    request: components.PostJudgeInSchema,
    options?: RequestOptions,
  ): Promise<components.JudgePreview> {
    return unwrapAsync(betaObservabilityJudgesCreate(
      this,
      request,
      options,
    ));
  }

  /**
   * Get judges with optional filtering and search
   */
  async list(
    request?: operations.GetJudgesV1ObservabilityJudgesGetRequest | undefined,
    options?: RequestOptions,
  ): Promise<components.JudgePreviews> {
    return unwrapAsync(betaObservabilityJudgesList(
      this,
      request,
      options,
    ));
  }

  /**
   * Get judge by id
   */
  async fetch(
    request: operations.GetJudgeByIdV1ObservabilityJudgesJudgeIdGetRequest,
    options?: RequestOptions,
  ): Promise<components.JudgePreview> {
    return unwrapAsync(betaObservabilityJudgesFetch(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete a judge
   */
  async delete(
    request: operations.DeleteJudgeV1ObservabilityJudgesJudgeIdDeleteRequest,
    options?: RequestOptions,
  ): Promise<void> {
    return unwrapAsync(betaObservabilityJudgesDelete(
      this,
      request,
      options,
    ));
  }

  /**
   * Update a judge
   */
  async update(
    request: operations.UpdateJudgeV1ObservabilityJudgesJudgeIdPutRequest,
    options?: RequestOptions,
  ): Promise<void> {
    return unwrapAsync(betaObservabilityJudgesUpdate(
      this,
      request,
      options,
    ));
  }
}
