// @flow
import policy from './policy';
import { User } from '../models';
import { AdminRequiredError } from '../errors';

const { allow } = policy;

allow(
  User,
  'read',
  User,
  (actor, user) => user && user.teamId === actor.teamId
);

allow(User, ['update', 'delete'], User, (actor, user) => {
  if (!user || user.teamId !== actor.teamId) return false;
  if (user.id === actor.id) return true;
  if (actor.isAdmin) return true;
  throw new AdminRequiredError();
});

allow(
  User,
  ['promote', 'demote', 'activate', 'suspend'],
  User,
  (actor, user) => {
    if (!user || user.teamId !== actor.teamId) return false;
    if (actor.isAdmin) return true;
    throw new AdminRequiredError();
  }
);
