#!/usr/bin/python
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
from __future__ import division
import os

import Image
from optparse import OptionParser
from ox.image import drawText, wrapText
from zipfile import ZipFile


root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
os.chdir(root_dir)


def render(infile, outfile):

    with open(infile) as f:

        image_size = (768, 1024)
        margin = 64
        offset = margin
        font_file = 'txt.ttf'
        font_size = 24
        line_height = 32
        max_lines = (image_size[1] - 2 * margin) / line_height

        image = Image.new('L', image_size, (255))

        for line in f:

            for line_ in line.decode('utf-8').strip().split('\r'):

                lines = wrapText(
                    line_,
                    image_size[0] - 2 * margin,
                    # we don't want the last line that ends with an ellipsis
                    max_lines + 1,
                    'txt.ttf',
                    font_size
                )

                for line__ in lines:
                    drawText(
                        image,
                        (margin, offset),
                        line__,
                        font_file,
                        font_size,
                        (0)
                    )
                    offset += line_height
                    max_lines -= 1

                    if max_lines == 0:
                        break

                if max_lines == 0:
                    break

            if max_lines == 0:
                break

        image.save(outfile)


def main():
    parser = OptionParser()
    parser.add_option(
        '-i', '--infile', dest='infile', help='txt file to be read'
    )
    parser.add_option(
        '-o', '--outfile', dest='outfile', help='jpg file to be written'
    )
    (options, args) = parser.parse_args()
    if None in (options.infile, options.outfile):
        parser.print_help()
    else:
        render(options.infile, options.outfile)


if __name__ == '__main__':
    main()