import countrycodes
textDict = {
    'Track chair':'Track Chair',
    'Speaker Normal':'Speaker',
    'Speaker Early Bird':'Speaker',
    'Speaker at door':'Speaker',
    'Keynote speaker':'Keynote',
    'Special invitee':'Invitee',
    'Conference staff':'Staff'
    }
colourDict = {
    'Track chair':'"blue"',
    'Speaker Normal':'"green"',
    'Speaker Early Bird':'"green"',
    'Speaker at door':'"green"',
    'Keynote speaker':'"orange"',
    'Special invitee':'"black"',
    'Conference staff':'"red"'
    }
studentDict = {
    'Student':'Student',
    'Student Early Bird':'Student',
    }
def size(txt):
    l = len(txt)
    if l <= 20:
        return 24
    if l <= 25:
        return 20
    if l <= 30:
        return 16
    if l <= 40:
        return 12
    if l <= 50:
        return 10
    return 9

def utf8ToLatin1(s):
    try:
        return s.encode('latin1', 'ignore')
    except AttributeError:
        raise
        return ''

def processPeopleData(outDir = '_out'):
    import pickle, os
    fp = file('person', 'r')
    people = pickle.load(fp)
    for person in people:
        if person['regType'] == 'noregistration':
            continue
        outName = os.path.join(outDir, person['email'] + '.pdf')
        userName = ''
        password = ''
        if person['company'] == 'None':
            person['company'] = ''
        person['country'] = countrycodes.countryToCode[person['country']]
        params = [utf8ToLatin1(person[x]) for x in [
            'firstname', 'lastname', 'company', 'email', 'regType',
            'country', 'tshirt', 'breakfast_m', 'breakfast_t', 'breakfast_w',
            'banquet']]
        print params
        createPage(outName, *params)


def createPage(outName, firstName, lastName, organisation, email,
        attendeeType, nationCode, tshirtSize, bm, bt, bw, banquet):
    from rlextra.preppy import preppy
    from rlextra.rml2pdf.rml2pdf import go
    import os
    import xml.sax.saxutils
    namespace = {
        'escape': xml.sax.saxutils.escape,
        'firstname': firstName,
        'lastname': lastName,
        'organisation': organisation,
        'size': '"%d"' % size(organisation),
        'email': email,
        'attendee_type': textDict.get(attendeeType, ''),
        'nation_code': nationCode,
        'tshirtsize': tshirtSize,
        'colour': colourDict.get(attendeeType, '"white"'),
        'student': studentDict.get(attendeeType, ''),
        'breakfast_m': bm,
        'breakfast_t': bt,
        'breakfast_w': bw,
        'banquet': banquet,
    }
    rml = preppy.getModule('nametag.prep', savePy=0, savePyc=0).getOutput(namespace)
    #open('badges.rml','w').write(rmlText)
    outName = os.path.abspath(outName)
    outDir = os.path.dirname(outName)
    if not os.path.isdir(outDir):
        os.makedirs(outDir)
    go(rml, outputFileName=os.path.basename(outName), outDir=outDir, progressCallBack=None)


def runExample():
    import os
    outFilename = 'example.pdf'
    createPage(outFilename,
               'Jean-Phillipe',
               'Nordg\xe5rd-Hansen',
               #'ZOPYX Software',
               'ZOPYX Software-Development and Consulting, Andreas Jung',
               'fabien.nkundabagenzi@africamuseum.be',
               'speaker',
               'SE',
               'XXL',
               'No',
               'Yes',
               'No',
               'Yes'
    )
    os.system('./start "%s"' % outFilename)


def runBatch():
    processPeopleData()


if __name__ == '__main__':
    #runExample()
    runBatch()
