import { authorize } from './auth-checks.js';
import { fetchClass } from '../../../services/classes.js';
import { fetchGroup } from '../../../services/groups.js';
import { mapToUsername } from '../../../interfaces/user.js';
import {AccountType} from "@dwengo-1/common/util/account-types";

/**
 * Expects the path to contain the path parameters 'classid', 'assignmentid' and 'groupid'.
 * Only allows requests from users who are
 * - either teachers of the class the assignment for the group was posted in,
 * - or students in the group
 */
export const onlyAllowIfHasAccessToGroup = authorize(async (auth, req) => {
    const {
        classid: classId,
        assignmentid: assignmentId,
        groupid: groupId,
    } = req.params as { classid: string; assignmentid: number; groupid: number };

    if (auth.accountType === AccountType.Teacher) {
        const clazz = await fetchClass(classId);
        return clazz.teachers.map(mapToUsername).includes(auth.username);
    } // User is student
    const group = await fetchGroup(classId, assignmentId, groupId);
    return group.members.map(mapToUsername).includes(auth.username);
});
