// Import express
import express from 'express';

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

// Import shared types
import CanvasAPI from '../../../shared/types/CanvasAPI';
import GetCourseEvent from '../../../shared/types/GetCourseEvent';
import RecordAttendanceFunction from '../../../shared/types/RecordAttendanceFunction';

// Import endpoints
import addCheckInPageRoute from './addCheckInPageRoute';
import addGetRosterRoute from './addGetRosterRoute';

/**
 * Add routes for taking attendance.
 * Also contains main entrypoint for QR code.
 * @author Benedikt Arnarsson
 * @param router the express router for the backend.
 * @param recordAttendance function used to record student attendance.
 * @param getCanvasAPI function to retrieve Canvas API.
 */
const addAttendanceRoutes = (opts: {
  router: Router,
  recordAttendance: RecordAttendanceFunction,
  getCanvasAPI: () => CanvasAPI,
  getCourseEvent: GetCourseEvent,
}) => {
  const {
    router,
    recordAttendance,
    getCanvasAPI,
    getCourseEvent,
  } = opts;

  const attendanceRouter = express.Router();

  addGetRosterRoute(attendanceRouter, getCanvasAPI);
  addCheckInPageRoute(attendanceRouter, recordAttendance, getCourseEvent);

  router.use('/attendance', attendanceRouter);
};

export default addAttendanceRoutes;
