import Image
import string, os, sys
import picture
import functions
from functions import getYesNo, quoteIt, status_working

class PictureManager:
    def __init__(self, sourceDir=None, props=None, putresult=None):
        self.props = props
        self.picture = None
        self.putresult = putresult
        self.sourceDir =  sourceDir
        self.stylesheet = None
        self.fullsize = "No"
        self.subdirs = None # list of subdirs this dir links to
        if self.props:
            self.galleryDirectory = props["galleryDirectory"]
            self.fullsize = props["fullsize"]
            self.stylesheet = props["stylesheet"]

    def getSubdirs(self):
        """Return list of subdirs or None"""
        return self.subdirs

    def addSubdirslist(self, listofsubdirs):
        if self.subdirs:
            self.subdirs.extend(listofsubdirs)
        else:
            self.subdirs = listofsubdirs
            
    def addSubdir(self, subdir):
        if self.subdirs:
            self.subdirs.append(subdir)
        else:
            self.subdirs = [subdir]
    def getPicture(self):
        return self.picture # head of linked list

    def setPicture(self, picture):
        self.picture = picture

    def getFullsize(self):
        return self.fullsize

    def setFullsize(self, fullsize):
        self.fullsize = fullsize

    def setStylesheet(self,stylesheet):
        self.stylesheet = stylesheet

    def getStylesheet(self):
        return self.stylesheet

    def setGalleryDirectory(self, directory):
        if directory is None or directory == '':
            raise  NE_InvalidDirectory
        else:
            self.galleryDirectory = directory

    def getGalleryDirectory(self):
        return self.galleryDirectory

    def createLinkedPictureList(self, filelist):
        # build linked list of pictures, head is self.picture"
        if self.picture is not None:
            return
        if filelist:
            curPicture = None
            for file in filelist:
                tmpPicture = picture.Picture(self.props, file)
                if self.picture is None:
                    self.picture = tmpPicture # start of linked list
                else:
                    curPicture.setNext(tmpPicture)
                    tmpPicture.setPrevious(curPicture)
                curPicture = tmpPicture


    def createPictureHTMLs(self,footer):
        "Generate HTML file for each picture for viewing a resized photo"
        if self.picture:
            curPic = self.picture
            while curPic:
                curPic.createPictureHTML(self.galleryDirectory, self.getStylesheet(), self.fullsize, footer)
                curPic = curPic.getNext()



    def FillPictureDirectories(self):
        """Copy thumbnails, resized and fullsized pictures to their subdirs from sourcedir
           If there is only one picture also create A 640*480 picture in special dir"""
        if self.picture:
            curPic = self.picture #first element in linked list
            picsProcessed = 0

            while curPic:
                curPic.putThumbnail(os.path.join(self.galleryDirectory, "thumbnails"))
                curPic.putResized(os.path.join(self.galleryDirectory, "resized"))
                if self.fullsize:
                    curPic.putFullsize(os.path.join(self.galleryDirectory, "fullsize"))
                curPic.unload()
                curPic = curPic.getNext()
                picsProcessed = picsProcessed + 1
                self.putresult("%s, %s processed" % (self.galleryDirectory, picsProcessed), functions.status_working)


            if self.props["numberOfPics"] == 1:
                directory = os.path.join(self.galleryDirectory, "indexpic")
                if os.path.exists(directory) == 0:
                    os.mkdir(directory)
                self.picture.putInDir(os.path.join(self.galleryDirectory, "indexpic"), self.props["centerPicSize"])
                self.picture.unload()
                picsProcessed = picsProcessed + 1
                self.putresult("%s, %s processed" % (self.galleryDirectory, picsProcessed), functions.status_working)

            print



    def getXML(self):
        """Return XML"""
        if self.picture:
            bodyXML = """\n        <picmanager>
            \n            <galleryDirectory>""" + str(self.galleryDirectory) + """</galleryDirectory>
                        <fullsize>""" + getYesNo(self.fullsize) + """</fullsize>
                        <stylesheet>""" + self.stylesheet + """</stylesheet>\n"""
            if self.subdirs:
                bodyXML = bodyXML + functions.wrapItemsInTag(self.subdirs, "subdir")
                
            bodyXML = bodyXML + self.getPictureXML()
            bodyXML = bodyXML + "\n        </picmanager>"""
            return bodyXML

        

    def getPictureXML(self):
        "Get XML for each picture"
        if self.picture:
            xml = [ "" ]
            curPic = self.picture
            while curPic:
                xml = curPic.getXML(xml)
                curPic = curPic.getNext()
            return string.joinfields(xml)
