import { CliTerseError } from '@alwaysai/alwayscli';
import { logger, stringifyError } from '../../util';
import { getCurrentProjectId } from '../../core/project';
import { CliRpcClient } from '../../infrastructure';

export async function fetchProjectModels() {
  const projectId = await getCurrentProjectId();
  return await CliRpcClient().getProjectModels({
    project_id: projectId
  });
}

export async function addModelToProject(modelId: string) {
  const projectId = await getCurrentProjectId();
  try {
    await CliRpcClient().addProjectModel({
      project_id: projectId,
      model_id: modelId
    });
  } catch (error) {
    logger.error(stringifyError(error));
    if (error.code !== 'DUPLICATE_MODEL_ADDED_TO_PROJECT') {
      throw new CliTerseError('Failed to add model to project!');
    }
  }
}

export async function removeModelFromProject(modelId: string) {
  const projectId = await getCurrentProjectId();
  try {
    await CliRpcClient().deleteProjectModel({
      project_id: projectId,
      model_id: modelId
    });
  } catch (error) {
    logger.error(stringifyError(error));
    throw new CliTerseError('Failed to remove model from project!');
  }
}
