from Products.PloneLanguageTool import lang_globals
from StringIO import StringIO
from Products.CMFCore.utils import getToolByName
from Products.Archetypes.Extensions.utils import install_subskin
# BBB CMF < 1.5
try:
    from Products.CMFCore.permissions import ManagePortal
except ImportError:
    from Products.CMFCore.CMFCorePermissions import ManagePortal

# check for I18NLayer
try:
   from Products import I18NLayer
   hasI18NLayer = 1
except ImportError:
   hasI18NLayer = 0

_globals = globals()

configlets = \
( { 'id'         : 'PloneLanguageTool'
  , 'name'       : 'Language Settings'
  , 'action'     : 'string:${portal_url}/portal_languages/prefs_languages'
  , 'category'   : 'Plone'
  , 'appId'      : 'PloneLanguageTool'
  , 'permission' : ManagePortal
  , 'imageUrl'   : 'flag-plone.gif'
  },
)

def install_tools(self, out):
    if not hasattr(self, 'portal_languages'):
        addTool = self.manage_addProduct['PloneLanguageTool'].manage_addTool
        addTool('Plone Language Tool')

def install_actions(self, out):
    at = getToolByName(self, 'portal_actions')
    at.manage_aproviders('portal_languages', add_provider=1)

def addLanguageSelectorSlot(self,out):
    if hasI18NLayer:
        # old portlet with i18nLayer support:
        slot = 'here/languageSelectorMacro/macros/globalLanguageSelector'
    else:
        # new portlet
        slot = 'here/portlet_languages/macros/portlet'

    left_slots = getattr(self, 'left_slots', None)
    right_slots = getattr(self, 'right_slots', ())

    if left_slots != None:
        if slot not in left_slots and slot not in right_slots:
            left_slots = list(left_slots) + [slot]
            self.left_slots = left_slots
            print >> out, 'Added Language selector portlet to left_slots property.\n'

def addConfiglets(self, out):
    configTool = getToolByName(self, 'portal_controlpanel', None)
    if configTool:
        for conf in configlets:
            out.write('Adding configlet %s\n' % conf['id'])
            configTool.registerConfiglet(**conf)

def install(self):
    out = StringIO()
    print >>out, 'Installing PloneLanguageTool'

    install_tools(self, out)
    install_actions(self, out)
    install_subskin(self, out, lang_globals)
    addConfiglets(self, out)
    # Re-enable this if you want the language portlet.
    # Superceded by the language selector.
    # addLanguageSelectorSlot(self,out)
    return out.getvalue()

#
# Uninstall methods
#

def unregisterActionProvider(self, out):
    actionTool = getToolByName(self, 'portal_actions', None)
    if actionTool:
        actionTool.deleteActionProvider('portal_languages')
        out.write('Removed action provider\n')

def removeConfiglets(self, out):
    configTool = getToolByName(self, 'portal_controlpanel', None)
    if configTool:
        for conf in configlets:
            out.write('Removing configlet %s\n' % conf['id'])
            configTool.unregisterConfiglet(conf['id'])

def uninstall(self):
    out=StringIO()
    unregisterActionProvider(self, out)
    removeConfiglets(self, out)
    return out.getvalue()
