// Import live grouper types
import { GrouperAlgoSettings, StudentGroupAssignment } from 'dce-live-grouper';

// Import shared helper
import genOccurrenceId from '../../../shared/helpers/genOccurrenceId';

// Import shared constants
import TTM_PATH_PREFIX from '../../../shared/constants/TTM_PATH_PREFIX';

// Import shared types
import {
  CreateEventBody,
  OccurrenceBasicInfo,
} from '../../../shared/types';

// Import types
import VisitServerEndpoint from '../../../types/VisitServerEndpoint';

/**
 * Call the backend to post a new event in a given series, i.e. inheriting old groups.
 * @author Benedikt Arnarsson
 * @param occInfo
 * @param seriesId
 */
const postNewEventInSeries = async (opts: {
  visitServerEndpoint: VisitServerEndpoint,
  occInfo: OccurrenceBasicInfo,
  seriesId: number,
  grouperAlgoSettings: GrouperAlgoSettings,
  preAssignments: StudentGroupAssignment[],
}): Promise<void> => {
  const {
    visitServerEndpoint,
    occInfo,
    seriesId,
    grouperAlgoSettings,
    preAssignments,
  } = opts;

  const { courseId } = occInfo;

  const occId = genOccurrenceId(occInfo);
  const eventId = occId.replace(`${courseId}-`, "");

  const createEventBody: CreateEventBody = {
    courseId,
    eventId,
    preAssignments,
    ...grouperAlgoSettings,
    metadata: {
      seriesId,
    },
  };

  return visitServerEndpoint({
    path: `${TTM_PATH_PREFIX}/grouper/event`,
    method: 'POST',
    params: {
      createEventBody: JSON.stringify(createEventBody),
    },
  });
};

export default postNewEventInSeries;
