##parameters=
View = 'View'
ModifyPortalContent = 'Modify portal content'


# Mosaic Document regular fti
mosaicDocument_fti = {'id' : 'Mosaic Document',
                      'title' : 'Mosaic Document',
                      'content_icon' : 'mosaic_icon.png',
                      'product' : 'MosaicDocument',
                      'factory' : 'addMosaicDocument',
                      'meta_type' : 'Mosaic Document',
                      'immediate_view' : 'metadata_edit_form',
                      'allow_discussion' : 1,
                      'filter_content_types' : 0,
                      'actions' : (
                          {'id': 'view',
                           'title': 'View',
                           'action': 'mosaicdocument_view',
                           'visible' : 1,
                           'permissions': (View,)},

                          {'id': 'edit',
                           'title': 'Edit',
                           'action': 'mosaicdocument_edit_form',
                           'visible' : 1,
                           'permissions': (ModifyPortalContent,)},

                          {'id': 'metadata',
                           'title': 'Metadata',
                           'action': 'metadata_edit_form',
                           'visible': 1,
                           'permissions': ()},),
                      }

# fixed fti part for basic blocks definitions
fixedFtiPart = {'product'               : 'MosaicDocument',
                'factory'               : 'addMosaicBlock',
                'immediate_view'        : 'view',
                'filter_content_types'  : 1,
                }

defaultActions = ({'id' : 'view',
                   'title' : 'view',
                   'action' : 'view',
                   'permissions' : (View,),
                   'category' : 'object',
                   },)

# basic blocks definitions
metaFtis = (
    {'id': 'Image Block',
     'title': 'Image block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'Image Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/block_image_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'image',
          'type': 'Image Slot',
          'args':
          {'thumb_width'  : {'type' : 'int', 'value' : 440},
           'thumb_height' : {'type' : 'int', 'value' : 440},
           'blankThumbnail' : {'type' : 'string', 'value' : 'mosaic_tool/no_image.jpg'},
           }
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },
    
    {'id': 'Two Images Block',
     'title': 'Two images block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'Two Images Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/block_two_images_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'image',
          'type': 'Image Slot',
          'args':
          {'thumb_width'  : {'type' : 'int', 'value' : 440},
           'thumb_height' : {'type' : 'int', 'value' : 440},
           'blankThumbnail' : {'type' : 'string', 'value' : 'mosaic_tool/no_image.jpg'},
           }
          },
         {'id': 'image2',
          'type': 'Image Slot',
          'args':
          {'thumb_width'  : {'type' : 'int', 'value' : 440},
           'thumb_height' : {'type' : 'int', 'value' : 440},
           'blankThumbnail' : {'type' : 'string', 'value' : 'mosaic_tool/no_image.jpg'},
           }
          }
         ),
     'rules' : (),
     'actions' : defaultActions,
     },

    {'id': 'Text Block',
     'title': 'Text block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'Text Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/block_text_template',
     'notify_wf' : 0,
     'slots' : (
         {'id' : 'text',
          'type' : 'Text Slot',
          'args' :
          {'text' : {'type' : 'text', 'value' : ''},
           'text_format' : {'type' : 'string', 'value' : 'structured-text'},
           'cols' : {'type' : 'int', 'value' : 68},
           'rows' : {'type' : 'int', 'value' : 20},
           }
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },

    {'id': 'File Block',
     'title': 'File Block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'File Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/block_file_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'file',
          'type': 'File Slot',
          'args': {},
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },
    
    {'id': 'Spacer Block',
     'title': 'Spacer block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'Spacer Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/block_spacer_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'space',
          'type': 'Spacer Slot',
          'args': {'nbOfSpaces' : {'type' : 'int', 'value' : 3},},
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },
    
    {'id': 'Section Block',
     'title': 'Section block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'Section Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/block_section_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'section',
          'type': 'String Slot',
          'args':
          {'text' : {'type' : 'string', 'value' : ''},
           'size' : {'type' : 'int', 'value' : 60},
           'choices' : {'type' : 'lines', 'value' : []},
           'castOperator' : {'type' : 'string', 'value' : 'string'},
           },
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },
    
    
    {'id': 'Container Block',
     'title': 'Container block',
     'icon': 'mosaic_tool/image_block_icon.gif',
     'meta_type': 'Container Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'actions' : defaultActions,
     },

## Boxes blocks
    {'id': 'Tree Box Block',
     'title': 'Tree Box Block',
     'icon': 'mosaic_tool/tree_block_icon.gif',
     'meta_type': 'Tree Box Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/tree_block_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'rootObject',
          'type': 'String Slot',
          'args':
          {'text' : {'type' : 'expr', 'value' : 'portal'},
           'size' : {'type' : 'int', 'value' : 45},
           'castOperator' : {'type' : 'string', 'value' : 'expr'},
           },
          },
         {'id': 'filteredMetaTypes',
          'type': 'List Slot',
          'args':
          {'text' : {'type' : 'lines', 'value' : 'Plinn Folder'},
           'cols' : {'type' : 'int', 'value' : 15},
           'rows' : {'type' : 'int', 'value' : 5},
           'castOperator' : {'type' : 'string', 'value' : 'lines'},
           },
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },
     
    {'id': 'Action Box Block',
     'title': 'Action Box Block',
     'icon': 'mosaic_tool/action_block_icon.gif',
     'meta_type': 'Action Box Block',
     'filter_content_types': 1,
     'allowed_content_types': (),
     'template' : 'mosaic_tool/action_block_template',
     'notify_wf' : 0,
     'slots' : (
         {'id': 'boxTitle',
          'type': 'String Slot',
          'args':
          {'text' : {'type' : 'string', 'value' : ''},
           'size' : {'type' : 'int', 'value' : 45},
           'castOperator' : {'type' : 'string', 'value' : 'string'},
           },
          },
         {'id': 'categories',
          'type': 'String Slot',
          'args':
          {'text' : {'type' : 'tokens', 'value' : 'global'},
           'size' : {'type' : 'int', 'value' : 45},
           'castOperator' : {'type' : 'string', 'value' : 'tokens'},
           },
          },
         ),
     'rules' : (),
     'actions' : defaultActions,
     },

    )

metaFtisDic = {}
for mfti in metaFtis :
    tempDic = mfti.copy()
    mfti.update(fixedFtiPart)
    metaFtisDic[tempDic['id']] = mfti

# adding Mosaic Document block definition
metaFtisDic[mosaicDocument_fti['id']] = mosaicDocument_fti

def completeMetaFti(dummyFti,
                    metaFtis,
                    slots = (),
                    template = '',
                    notify_wf = 0) :
    allRules = ()
    for mfti in metaFtis :
        rulesDic = {'blockType' : mfti['id'],
                    'maxNbInstance' : 0,
                    'allowMove' : 1,
                    'mode' : 'wd',
                    },
        allRules += rulesDic

    ftiExtension = {'rules' : allRules,
                    'slots' : (),
                    'template' : template,
                    'notify_wf' : 1,
                    }
    ftiExtension.update(dummyFti)
    return ftiExtension

# complete meta fti for Mosaic Document block definition
metaFtisDic[mosaicDocument_fti['id']] = completeMetaFti(metaFtisDic[mosaicDocument_fti['id']],
                                                        metaFtis,
                                                        notify_wf = 1)

# Idem for Container Block definition
metaFtisDic['Container Block'] = completeMetaFti(metaFtisDic['Container Block'],
                                                 metaFtis,
                                                 template = 'mosaic_tool/block_container_template')


def getDefaultBlockMetaFtis() :
    return metaFtisDic
