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

import { checksV2CreateDeploymentCheckRun } from "../funcs/checksV2CreateDeploymentCheckRun.js";
import { checksV2CreateProjectCheck } from "../funcs/checksV2CreateProjectCheck.js";
import { checksV2DeleteProjectCheck } from "../funcs/checksV2DeleteProjectCheck.js";
import { checksV2GetDeploymentCheckRun } from "../funcs/checksV2GetDeploymentCheckRun.js";
import { checksV2GetProjectCheck } from "../funcs/checksV2GetProjectCheck.js";
import { checksV2ListCheckRuns } from "../funcs/checksV2ListCheckRuns.js";
import { checksV2ListDeploymentCheckRuns } from "../funcs/checksV2ListDeploymentCheckRuns.js";
import { checksV2ListProjectChecks } from "../funcs/checksV2ListProjectChecks.js";
import { checksV2UpdateDeploymentCheckRun } from "../funcs/checksV2UpdateDeploymentCheckRun.js";
import { checksV2UpdateProjectCheck } from "../funcs/checksV2UpdateProjectCheck.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import {
  CreateDeploymentCheckRunRequest,
  CreateDeploymentCheckRunResponseBody,
} from "../models/createdeploymentcheckrunop.js";
import {
  CreateProjectCheckRequest,
  CreateProjectCheckResponseBody,
} from "../models/createprojectcheckop.js";
import {
  DeleteProjectCheckRequest,
  DeleteProjectCheckResponseBody,
} from "../models/deleteprojectcheckop.js";
import {
  GetDeploymentCheckRunRequest,
  GetDeploymentCheckRunResponseBody,
} from "../models/getdeploymentcheckrunop.js";
import {
  GetProjectCheckRequest,
  GetProjectCheckResponseBody,
} from "../models/getprojectcheckop.js";
import {
  ListCheckRunsRequest,
  ListCheckRunsResponseBody,
} from "../models/listcheckrunsop.js";
import {
  ListDeploymentCheckRunsRequest,
  ListDeploymentCheckRunsResponseBody,
} from "../models/listdeploymentcheckrunsop.js";
import {
  ListProjectChecksRequest,
  ListProjectChecksResponseBody,
} from "../models/listprojectchecksop.js";
import {
  UpdateDeploymentCheckRunRequest,
  UpdateDeploymentCheckRunResponseBody,
} from "../models/updatedeploymentcheckrunop.js";
import {
  UpdateProjectCheckRequest,
  UpdateProjectCheckResponseBody,
} from "../models/updateprojectcheckop.js";
import { unwrapAsync } from "../types/fp.js";

export class ChecksV2 extends ClientSDK {
  /**
   * List all checks for a project
   *
   * @remarks
   * List all checks for a project, optionally filtered by target.
   */
  async listProjectChecks(
    request: ListProjectChecksRequest,
    options?: RequestOptions,
  ): Promise<ListProjectChecksResponseBody> {
    return unwrapAsync(checksV2ListProjectChecks(
      this,
      request,
      options,
    ));
  }

  /**
   * Create a check
   *
   * @remarks
   * Creates a new check for a project.
   */
  async createProjectCheck(
    request: CreateProjectCheckRequest,
    options?: RequestOptions,
  ): Promise<CreateProjectCheckResponseBody> {
    return unwrapAsync(checksV2CreateProjectCheck(
      this,
      request,
      options,
    ));
  }

  /**
   * Get a check
   *
   * @remarks
   * Return a detailed response for a single check.
   */
  async getProjectCheck(
    request: GetProjectCheckRequest,
    options?: RequestOptions,
  ): Promise<GetProjectCheckResponseBody> {
    return unwrapAsync(checksV2GetProjectCheck(
      this,
      request,
      options,
    ));
  }

  /**
   * Update a check
   *
   * @remarks
   * Update an existing check.
   */
  async updateProjectCheck(
    request: UpdateProjectCheckRequest,
    options?: RequestOptions,
  ): Promise<UpdateProjectCheckResponseBody> {
    return unwrapAsync(checksV2UpdateProjectCheck(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete a check
   *
   * @remarks
   * Delete an existing check and all of its runs.
   */
  async deleteProjectCheck(
    request: DeleteProjectCheckRequest,
    options?: RequestOptions,
  ): Promise<DeleteProjectCheckResponseBody> {
    return unwrapAsync(checksV2DeleteProjectCheck(
      this,
      request,
      options,
    ));
  }

  /**
   * List runs for a check
   *
   * @remarks
   * List all runs associated with a given check.
   */
  async listCheckRuns(
    request: ListCheckRunsRequest,
    options?: RequestOptions,
  ): Promise<ListCheckRunsResponseBody> {
    return unwrapAsync(checksV2ListCheckRuns(
      this,
      request,
      options,
    ));
  }

  /**
   * List check runs for a deployment
   *
   * @remarks
   * List all check runs for a deployment.
   */
  async listDeploymentCheckRuns(
    request: ListDeploymentCheckRunsRequest,
    options?: RequestOptions,
  ): Promise<ListDeploymentCheckRunsResponseBody> {
    return unwrapAsync(checksV2ListDeploymentCheckRuns(
      this,
      request,
      options,
    ));
  }

  /**
   * Create a check run
   *
   * @remarks
   * Creates a new check run for a deployment.
   */
  async createDeploymentCheckRun(
    request: CreateDeploymentCheckRunRequest,
    options?: RequestOptions,
  ): Promise<CreateDeploymentCheckRunResponseBody> {
    return unwrapAsync(checksV2CreateDeploymentCheckRun(
      this,
      request,
      options,
    ));
  }

  /**
   * Get a check run
   *
   * @remarks
   * Return a detailed response for a single check run.
   */
  async getDeploymentCheckRun(
    request: GetDeploymentCheckRunRequest,
    options?: RequestOptions,
  ): Promise<GetDeploymentCheckRunResponseBody> {
    return unwrapAsync(checksV2GetDeploymentCheckRun(
      this,
      request,
      options,
    ));
  }

  /**
   * Update a check run
   *
   * @remarks
   * Update an existing check run for a deployment.
   */
  async updateDeploymentCheckRun(
    request: UpdateDeploymentCheckRunRequest,
    options?: RequestOptions,
  ): Promise<UpdateDeploymentCheckRunResponseBody> {
    return unwrapAsync(checksV2UpdateDeploymentCheckRun(
      this,
      request,
      options,
    ));
  }
}
