#!/usr/bin/env python3

import os
import os.path
import shutil
import subprocess
import sys

#Version   Feb. 25, 2020
# Run drawtree as a command
#Synopsis: drawtree.py treefile uselen lableorient lableangle rotation
#                       iterate angleofarc regularization charheight outformat outfile

#Convert arguments to variables
TREEFILE       = sys.argv[1]
USELEN         = sys.argv[2]
LABLEORIENT    = sys.argv[3]
LABLEANGLE     = sys.argv[4]
ROTATION       = sys.argv[5]
ITERATE        = sys.argv[6]
ANGLEOFARC     = sys.argv[7]
REGULARIZATION = sys.argv[8]
FONTFILE       = sys.argv[9]
CHARHEIGHT     = sys.argv[10]
OUTFORMAT      = sys.argv[11]
OUTFILE        = sys.argv[12]

# Make a temporary directory in which to run the program
STARTDIR = os.getcwd()
TEMPDIR  = "DRAWTREE." + str(os.getpid())
os.mkdir(TEMPDIR)
shutil.copyfile(TREEFILE, os.path.join(TEMPDIR, "intree"))
os.chdir(TEMPDIR)


#----------------- generate keyboard input to send to program -----
comfile_h = open('DrawtreeComfile', 'w')
if OUTFORMAT in ("l", "m", "j", "f", "a", "z", "p", "x", "v", "e", "c", "t", "o", "b"):
    # choose an output file format
    comfile_h.write("P\n")
    comfile_h.write(OUTFORMAT + "\n")

    # some output formats require additional specifications
    if OUTFORMAT == "j":     # Hewlett Packard Laserjet
        comfile_h.write("n\n")
        comfile_h.write("2\n")         #Resolution 150 dpi
    elif OUTFORMAT == "p":     # PC Paintbrush PCX format
        comfile_h.write("n\n")
        comfile_h.write("3\n")         #Resolution VGA 1024 x 768
    elif OUTFORMAT == "x":     #X11 bitmap
        comfile_h.write("n\n")
        comfile_h.write("1024\n")      #X resolution
        comfile_h.write("512\n")       #Y resolution
    # all others, no extra specs. needed

# Turn off X-windows display
comfile_h.write("v\n")
comfile_h.write("n\n")

# Tree parameters

if USELEN == "no":
    comfile_h.write("b\n")

comfile_h.write("l\n")
comfile_h.write(LABLEORIENT + "\n")

if LABLEORIENT == "f":
    comfile_h.write(LABLEANGLE + "\n")

comfile_h.write("r\n")
comfile_h.write(ROTATION + "\n")

# Iterate - default is Equal-Daylight; do nothing
if ITERATE == "In":
    comfile_h.write("i\n")
elif ITERATE == "No":
    comfile_h.write("i\n")
    comfile_h.write("i\n")
    comfile_h.write(ANGLEOFARC + "\n")
    if REGULARIZATION == "reg":
        comfile_h.write("g\n")

comfile_h.write("c\n")
comfile_h.write(CHARHEIGHT + "\n")

comfile_h.write("y\n")     #accept current settings and write plotfile
comfile_h.close()

#---------------------  Run Drawtree ----------------------
shutil.copyfile(FONTFILE, "fontfile")
comfile_h = open('DrawtreeComfile', 'r')
os.nice(10)
p_drawtree = subprocess.Popen(["drawtree"], stdin=comfile_h)
p_drawtree.wait()
os.nice(0)

os.chdir(STARTDIR)
shutil.move(os.path.join(TEMPDIR, "plotfile"), OUTFILE)
shutil.rmtree(TEMPDIR)
