// Import Grouper
import { initGrouper, EventStateData } from 'dce-live-grouper';

// Import Mango
import { CollectionInterface, Collection } from 'dce-mango';

// Import types
import OccurrenceDocument from './shared/types/OccurrenceDocument';

/*------------------------------------------------------------------------*/
/* ---------------------------- Collections ----------------------------- */
/*------------------------------------------------------------------------*/

let groupCollection: CollectionInterface<EventStateData>;
let occurrenceCollection: CollectionInterface<OccurrenceDocument>;

/*------------------------------------------------------------------------*/
/* ----------------------------- Initialize ----------------------------- */
/*------------------------------------------------------------------------*/

const initCollections = (CollectionCons: typeof Collection) => {
  occurrenceCollection = new CollectionCons<OccurrenceDocument>(
    'OccurrenceDocument',
    {
      uniqueIndexKey: 'id',
      indexKeys: [
        'courseId',
        'ihid',
      ],
    },
  );

  const {
    eventCollection,
  } = initGrouper(CollectionCons);

  groupCollection = eventCollection;
};

/*------------------------------------------------------------------------*/
/* ------------------------------ Getters ------------------------------- */
/*------------------------------------------------------------------------*/

const getOccurrenceCollection = (): CollectionInterface<OccurrenceDocument> => {
  if (!occurrenceCollection) {
    throw new Error('Occurrence collection has not been initiated.');
  }
  return occurrenceCollection;
};

const getGroupCollection = (): CollectionInterface<EventStateData> => {
  if (!groupCollection) {
    throw new Error('Group collection has not been initiated.');
  }
  return groupCollection;
};

/*------------------------------------------------------------------------*/
/* ------------------------------ Export -------------------------------- */
/*------------------------------------------------------------------------*/

export {
  initCollections,
  getOccurrenceCollection,
  getGroupCollection,
};
