from ideatree.models import ClientPermission
from django.http import HttpResponse

def initPermsTable(request):
	try:
		ClientPermission.objects.all().delete()

		ClientPermission.objects.update_or_create(action="prettify", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="prettify", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="importEdgeList", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="importEdgeList", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="importAdjacencyList", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="importAdjacencyList", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="importGXL", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="importGXL", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="importCSV", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="importCSV", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="publish", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="publish", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="exportDot", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="exportDot", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="exportCSV", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="exportCSV", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="exportDot", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="exportDot", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="exportEXCEL", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="exportEXCEL", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="exportGXL", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="exportGXL", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="inviteToCollaborate", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="inviteToCollaborate", iown=False, permitted=True)

    # NOTE: in order for layout permissions to be consistent, both mapLayout and setMapAttribute must agree.
    # That's because the first is for the request for server layout, the second for client echoing back of the layout.
		ClientPermission.objects.update_or_create(action="mapLayout", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="mapLayout", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="setMapAttribute", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="setMapAttribute", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="putNodeInCluster", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="putNodeInCluster", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="createNode", iown=True, permitted=True)
		# IMPORTANT: Since at this point the node is a provisional, not owned by anyone, it's always 'iDontOwn'.  
		ClientPermission.objects.update_or_create(action="createNode", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="createEdge", iown=True, permitted=True)
		# FIXME: true for edges?:  IMPORTANT: Since at this point the node is a provisional, not owned by anyone, it's always 'iDontOwn'.  
		ClientPermission.objects.update_or_create(action="createEdge", iown=False, permitted=True)


		ClientPermission.objects.update_or_create(action="getNodeIdByLabel", iown=True, permitted=True)
		# iOwn here should refer to map
		ClientPermission.objects.update_or_create(action="getNodeIdByLabel", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="removeNode", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="removeNode", iown=False, permitted=False)

		# NOTE: if removeNode is allowed for a given user, removeEdge must be, too.  FIXME: write a constraint for this.
		ClientPermission.objects.update_or_create(action="removeEdge", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="removeEdge", iown=False, permitted=False)

		ClientPermission.objects.update_or_create(action="setNodeAttribute", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="setNodeAttribute", iown=False, permitted=True)

		ClientPermission.objects.update_or_create(action="setEdgeAttribute", iown=True, permitted=True)
		ClientPermission.objects.update_or_create(action="setEdgeAttribute", iown=False, permitted=True)

	except Exception as err:
		raise

