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

from PIL import Image
from argparse import ArgumentParser
from ox.image import drawText, wrapText

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


def decode_line(line):
    try:
        line = line.decode('utf-8')
    except:
        try:
            line = line.decode('latin-1')
        except:
            line = line.decode('utf-8', errors='replace')
    return line

def render(infile, outfile):

    with open(infile, 'rb') 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:
            line = decode_line(line)

            for line_ in line.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, quality=50)


def main():
    parser = ArgumentParser()
    parser.add_argument(
        '-i', '--infile', dest='infile', help='txt file to be read', required=True
    )
    parser.add_argument(
        '-o', '--outfile', dest='outfile', help='jpg file to be written', required=True
    )
    options = parser.parse_args()
    render(options.infile, options.outfile)


if __name__ == '__main__':
    main()