# -*- coding: iso-8859-1 -*-
"""
  MoinMoin - Processor PdfLetter
    
  @copyright: 2004 by Fredrik Björnsson <info@cleosan.com>
  @license: GNU GPL.

  Changes:
    2004-10-07 - Started
    2004-10-07 - Fixed indention to 4 spaces and a small bug
  
"""
                
                
Dependencies = []

import os,StringIO
from MoinMoin import config
from MoinMoin.action import AttachFile
from reportlab.platypus import KeepTogether, Spacer, SimpleDocTemplate, Table, Paragraph, TableStyle, Frame,PageBreak
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.lib.enums import *
from reportlab.lib.styles import getSampleStyleSheet,ParagraphStyle


  
def process(request, formatter, lines):
    """ the process starts here """
    del lines[0]
    keys=['TO','FROM','DATE','SUBJECT','BODY','SIGNATURE','INCLUDED']
    args=parseLines(keys,lines)
  
    # make the html
    request.write("""<div style="text-align:right;"><a target=_new href="?action=AttachFile&do=get&target=report.pdf">Get Pdf</a></div>""")
    request.write(formatter.rawHTML("<hr><div style='font-size:24px;text-align:center;'>"+"<br>".join(args['FROM']))+"</div><hr>")
    request.write(formatter.rawHTML("<div style='font-size:20px;text-align:right;'>"+"".join(args['DATE']))+"</div>")
    request.write(formatter.rawHTML("<div style='font-size:20px;text-align:left;margin-left:50px;'>"+"<br>".join(args['TO']))+"</div>")
    request.write(formatter.rawHTML("<div style='font-size:20px;text-align:left;margin-left:50px;margin-top:30px;'>"+"".join(args['SUBJECT']))+"</div>")
    request.write(formatter.rawHTML("<div style='font-size:20px;text-align:left;margin-left:50px;margin-top:10px;'>"+"<br>".join(args['BODY']))+"</div>")
    request.write(formatter.rawHTML("<div style='font-size:20px;text-align:left;margin-left:50px;margin-top:30px;'>"+"<br>".join(args['SIGNATURE']))+"</div>")
    request.write(formatter.rawHTML("<div style='font-size:20px;text-align:left;margin-left:50px;margin-top:30px;'>"+"<br>".join(args['INCLUDED']))+"</div>")
  
    # make the pdf
    attDir=AttachFile.getAttachDir(formatter.page.page_name,create=1)+'/'
    open(attDir+'report.pdf','w').write(makeLetterPdf(args))
 
 
#
# Pdf function
#

def makeLetterPdf(args):
    """ Makes the pdf letter """
    tableStyle=[
      ('ALIGN', (0,0), (-1,-1), 'LEFT'),
      ('FONT', (0,0), (-1,-1),'Helvetica', 12),
      ('ALIGN', (0,0), (0,0), 'CENTER'),
      ('FONT', (0,0), (0,0),'Helvetica', 14),    
      ('LINEABOVE', (0,0), (0,0), 1, colors.black),
      ('LINEBELOW', (0,0), (0,0), 1, colors.black),
      ('ALIGN', (0,1), (0,1), 'RIGHT'),
      ]
    bodyRows=[]
    bodyStyle=getNormalStyle(size=12)
    for line in args['BODY']:
        bodyRows.append([Paragraph(line,bodyStyle)])
    
    tableData=[
    ["\n".join(args['FROM'])],
    ["".join(args['DATE'])],
    [""],
    ["\n".join(args['TO'])],
    [""],
    ["".join(args['SUBJECT'])]
    ]+bodyRows+[
    [""],
    ["\n".join(args['SIGNATURE'])],
    [""],
    ["\n".join(args['INCLUDED'])]
    ]
    
    tableColumn=[17*cm]
    table = Table(tableData,tableColumn,rowHeights=None,splitByRow=1)
    table.setStyle(TableStyle(tableStyle))
    table.hAlign = "LEFT"
    temp = StringIO.StringIO()
    doc = SimpleDocTemplate(temp, pagesize=A4, showBoundary=0, leftMargin=1.5*cm, rightMargin=1.5*cm, topMargin=1.5*cm, bottomMargin=1.5*cm)
    doc.build([table])
    return temp.getvalue()
  


#
# Help functions
#

def parseLines(keys,lines):
    """  Parses the lines, and returns a dict  """
    found_key,args,tmp='',{},[]
    for line in lines:
        split=line.split('=')
        if len(split)>1 and split[0].strip() in keys:
            args[found_key]=tmp
            found_key,tmp=split[0].strip(),[]
            if split[1].strip()!='':
                tmp.append(split[1].strip())  
        else:
          tmp.append(line)  
    args[found_key]=tmp
    for key in keys:
        if not args.has_key(key):
            args[key]=['']
        elif len(args[key])>1 and args[key][-1]=='':
            del args[key][-1] 
    return args

def getNormalStyle(align="left",font="Helvetica",size=11,leading=14.4):
    """ get a normal style to use with paragraph """
    # Normal paragraph style
    pNormal = ParagraphStyle('Normal',None)
    pNormal.fontName = font
    pNormal.fontSize = size
    pNormal.leading = leading
    if align=="left":
        pNormal.alignment = TA_LEFT
    elif align=="right":
        pNormal.alignment = TA_RIGHT
    else:
        pNormal.alignment = TA_CENTER
    return pNormal
                                                            

