#from Products.ERP5.Document.Image import Image
#from Products.ERP5Type.tests.utils import FileUpload
import Image
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
import transaction
from zLOG import LOG,INFO,ERROR 
import json 
from cStringIO import StringIO
import os


class FileUpload(file):
  """Act as an uploaded file.
  """
  __allow_access_to_unprotected_subobjects__ = 1
  def __init__(self, path, name):
    self.filename = name
    file.__init__(self, path)
    self.headers = {}


def makeFilePath(name):
  return os.path.join(os.path.dirname(__file__), 'tmp', name)

def makeFileUpload(name, as_name=None):
  if as_name is None:
    as_name = name
  path = makeFilePath(name)
  return FileUpload(path, as_name)

class TestSafeImage(ERP5TypeTestCase):

  def afterSetUp(self):
    portal = self.getPortalObject()
    self.image_module = self.portal.getDefaultModule(portal_type = 'Image Module')
    self.assertTrue(self.image_module is not None)
    
    if getattr(self.image_module,'testfruit',None) is not None: 
      LOG('DELETE IMAGEEEEEEE',INFO,'DELETEEEEEEEEE  IMAGEEEE!!!!!')
      self.image_module.manage_delObjects(ids=['testfruit'])
   
    if getattr(self.image_module,'testTile',None) is not None: 
      LOG('DELETE TEST TILE',INFO,'DELETEEEEEEEEE!!!!!')
      self.image_module.manage_delObjects(ids=['testTile'])
   
    if getattr(self.image_module,'testTileTransformed',None) is not None: 
      self.image_module.manage_delObjects(ids=['testTileTransformed'])
      LOG('DELETE TEST TILETRANSFORMED!!!!!!!',INFO,'DELETEEEEEEEEE TTTTTTT!!!!!')
    transaction.commit()
    self.tic()  


  def _createImage(self):
    portal = self.getPortalObject()
    image_path = portal.portal_skins.erp5_safeimage.fruit
    image_buffer = StringIO()
    image_buffer.write(image_path.data.__str__())
    image_buffer.seek(0)
    image = self.image_module.newContent(portal_type='Image',title='testfruit',
                                id='testfruit',file=image_buffer,filename='testfruit')   
    return image 
 
  def _createTileImage(self):
    portal = self.getPortalObject()
    tile_image = makeFileUpload('fruit.jpg')
    tile = self.image_module.newContent(portal_type='Image Tile',title='testTile',
                             id='testTile',file=tile_image,filename='testTile')
    return tile 
  
  def _createTileImageTransformed(self):
    portal = self.getPortalObject()
    tile_image_transformed = makeFileUpload('fruit.jpg')
    tile_transformed = self.image_module.newContent(portal_type='Image Tile Transformed',
                             title='testTileTransformed',id='testTileTransformed',
                             file=tile_image_transformed,filename='testTileTransformed')
    return tile_transformed 
 
  def test_01_CreateImage(self):
    image = self._createImage()
    self.assertTrue(image.hasData())
    transaction.commit()
    self.tic()
    self.assertNotEqual(image,None) 
  
  def test_02_CreateTileImage(self):
    tile = self._createTileImage()
    transaction.commit()
    self.tic()
    self.assertNotEqual(tile,None)
    tile_image_list = tile.objectValues() 
    LOG('len TILE:',INFO,'%s' %(len(tile_image_list)))
    self.assertEquals(len(tile_image_list),2)

  def test_03_CreateTileImageTransformed(self):
    tile_transformed = self._createTileImageTransformed()
    transaction.commit()
    self.tic()
    self.assertNotEqual(tile_transformed,None)   
    tile_image_transformed_list = tile_transformed.objectValues()
    LOG('len TRANSFOR:',INFO,'%s' %(len(tile_image_transformed_list)))
    self.assertEquals(len(tile_image_transformed_list),3)