from lawrence.Entity import Entity
from lawrence.db import DBRow

class User (Entity):
	def HasPermission(self, path, permission):
		if not isinstance(path, str) and hasattr(path, 'path'):
			path = path.path

		permissionLevel = {
			'none': 0,
			'read': 1,
			'write': 2,
			'admin': 3,
		}

		# FIXME
		if path in ('/SchoolClass/', '/campus/'):
			if any((grant.path.startswith('/campus/') or grant.path == '/' or grant.path == '') and
				   permissionLevel[grant.permission] >= permissionLevel[permission]
				   for grant in self.Permissions):
				return True

		relevantGrants = [grant for grant in self.Permissions if path.startswith(grant.path)]

		if not relevantGrants:
			return False

		mostPowerfulGrant = max(relevantGrants, key = lambda grant: permissionLevel[grant.permission])

		return permissionLevel[mostPowerfulGrant.permission] >= permissionLevel[permission]

	def Grant(self, path, permission):
		self.Permissions.append(DBRow(path = path, permission = permission))