import invariant from "tiny-invariant";
import { createClient } from "../client";
import { ClientFn } from "../types/core";
import { type ExperimentInfo } from "../types/experiments";

export type GetExperimentParams = ClientFn & {
  /**
   * The experiment ID
   */
  experimentId: string;
};

/**
 * Returns an object containing the high-level info about an experiment
 */
export async function getExperimentInfo({
  client: _client,
  experimentId: experiment_id,
}: GetExperimentParams): Promise<ExperimentInfo> {
  const client = _client || createClient();
  const { data: { data: experimentData } = {} } = await client.GET(
    "/v1/experiments/{experiment_id}",
    {
      params: {
        path: {
          experiment_id,
        },
      },
    }
  );
  invariant(experimentData, "Failed to get experiment");
  return {
    id: experimentData.id,
    datasetId: experimentData.dataset_id,
    datasetVersionId: experimentData.dataset_version_id,
    projectName: experimentData.project_name || "", // This will never happen
    metadata: experimentData.metadata,
  };
}
