import { Archon } from "../Archon.js";
import { Role } from "../types/policy.js";
import { Session, SessionId } from "../types/user.js";

/**
 * Changes the active role of an ongoing session. 
 * 
 * **Warning**: This only works for nonprivileged roles. Use `requestPrivilegedRoleSwitch` for privileged roles.
 * @param session The session to change the role of.
 * @param newRole The new role to switch to.
 * @returns The updated session.
 */
export default async function switchRole(session: Session | SessionId, newRole: Role): Promise<Session> {
    const request = await Archon.request('/users/roleSwitch', 'POST', {
        sessionId: typeof session === 'number' ? session : session.id,
        newRoleName: newRole.name
    });

    if (request.status !== 200) {
        throw new Error(`Failed to switch role: ${request.data}`);
    }

    return request.data;
}