##############################################################################
#
# Copyright (c) 2015 Nexedi SARL and Contributors. All Rights Reserved.
#                    Wenjie ZHENG <wenjie.zheng@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
##############################################################################

from AccessControl import ClassSecurityInfo
from Acquisition import aq_inner, aq_parent
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5Type.XMLObject import XMLObject
from zLOG import LOG, ERROR, DEBUG, WARNING

class PermissionRoles(XMLObject):
  """
  Permission role matrix cell unit,
  Used to assign a role to a permission.
  """

  meta_type = 'ERP5 PermissionRoles'
  portal_type = 'PermissionRoles'
  add_permission = Permissions.AddPortalContent

  is_selected = 0 # for checkerbox (True 1 /False 0)

  isPortalContent = 1
  isRADContent = 1

  # Declarative security
  security = ClassSecurityInfo()
  security.declareObjectProtected(Permissions.AccessContentsInformation)

  # Declarative properties
  property_sheets = (
             PropertySheet.Base,
             PropertySheet.XMLObject,
             PropertySheet.CategoryCore,
             PropertySheet.DublinCore,
             PropertySheet.State,)

  def getPermissionRole(self):
    permission = 'None'
    role = 'None'
    if self.is_selected == 1:
      permission_id = int(self.id.split('_')[1])
      role_id = int(self.id.split('_')[2])
      # zwj: make sure here gets the right coordinates
      workflow = self.getParent().getParent()
      permission_list = sorted(workflow.getManagedPermissionList())
      role_list = workflow.getManagedRoleList()
      permission = permission_list[permission_id]
      role = role_list[role_id]
      # zwj: check the name of the role and permission is the one we want
    if role == 'None':
      role = ['Manager']
    return permission, role