#!/usr/local/bin/python2.6
# -*- coding: utf-8 -*-

from odf.opendocument import OpenDocumentText,load
from odf.style import Style, TextProperties,ParagraphProperties
from odf.table import Table, TableColumn, TableRow, TableCell, CellAddress
from odf import meta,text
import sys
import os
import os.path

def nueva_celda(fila, celda, elem):
    celda.addElement(elem)
    fila.addElement(celda)
    


def genera_doc(lista):
    textdoc = OpenDocumentText()
    
    centrado = Style(name="centrado",family="paragraph")
    centrado.addElement(ParagraphProperties(textalign = 'center'))
    centrado.addElement(TextProperties(fontsize='30pt'))
    
    textdoc.styles.addElement(centrado)
    
    header = text.H(text=u"Documentos de la empresa", outlinelevel=1, stylename=centrado)
    textdoc.text.addElement(header)

    
    listado = text.List()
    for documento in lista:

        if u'dc:title' in documento[1].keys():
            entrada = text.ListItem()
            h = text.H(text=documento[1][u'dc:title'], outlinelevel=4) # ruta
            entrada.addElement(h)
            listado.addElement(entrada)
        else:
            entrada = text.ListItem()
            h = text.H(text=documento[0].decode('utf-8'), outlinelevel=4) # ruta
            entrada.addElement(h)
            listado.addElement(entrada)

        listado2 = text.List()
        entrada = text.ListItem()
        entrada.addElement(listado2)
        listado.addElement(entrada)

        
        print "Procesando %s" %  documento[0]
        
        entrada = text.ListItem()
        a = text.A(text=documento[0].decode('utf-8'),
                   href=u'file://%s' % documento[0].decode('utf-8')) 
        p = text.P()
        p.addElement(a)

        entrada.addElement(p)
        listado2.addElement(entrada)
        
        
        
        llaves = documento[1].keys()

        for llave in [u'meta:creation-date',
                      u'meta:editing-cycles',
                      u'meta:editing-duration',
                      u'dc:subject',
                      u'dc:date']:
            
            if llave in llaves:
                
                entrada = text.ListItem()
                p = text.P(text= u'%s = %s'%( llave, unicode(documento[1][llave])))
                entrada.addElement(p)
                listado2.addElement(entrada)
        
    textdoc.text.addElement(listado)
        
    textdoc.save("indice", True)






def analiza_odf(ruta):

    doc = load(ruta)

    datos = {}
    datos['tipo_de_documento'] = doc.getMediaType()
    
    for e in doc.meta.childNodes:
        datos[e.tagName] = unicode(e.firstChild)
    
    return (ruta,datos)



def analiza(d):
    ficheros = [f for f in  os.listdir(d) if f[-3:] in ['ods','odt']]

    lista = []
    for fichero in ficheros:
        ruta = os.path.realpath('%s/%s'%(d,fichero))
        lista.append(analiza_odf(ruta))

    genera_doc(lista)



if __name__ == '__main__':
    analiza(sys.argv[1])
    

