#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import gflags as flags
import subprocess
import sys
import os

FLAGS = flags.FLAGS

def setgflags():
    flags.DEFINE_integer('b', 100, "set beam size, (DEFAULT=100)")
    flags.DEFINE_boolean('V', False, "use vienna parameters, (DEFAULT=FALSE)")
    flags.DEFINE_boolean('sharpturn', False, "enable sharp turn in prediction, (DEFAULT=FALSE)")
    flags.DEFINE_boolean('verbose', False, "print out energy of each loop in the structure, (DEFAULT=FALSE)")
    flags.DEFINE_boolean('eval', False, "print out energy of a given structure, (DEFAULT=FALSE)") # adding eval mode
    flags.DEFINE_boolean('constraints', False, "print out energy of a given structure, (DEFAULT=FALSE)") # adding eval mode
    flags.DEFINE_boolean('zuker', False, "output Zuker suboptimal structures, (DEFAULT=FALSE)")
    flags.DEFINE_float('delta', 5.0, "compute Zuker suboptimal structures with scores or energies(-V, kcal/mol) in a centain range of the optimum, (DEFAULT=5.0)")
    argv = FLAGS(sys.argv)

def main():
    use_vienna = FLAGS.V
    beamsize = str(FLAGS.b)
    is_sharpturn = '1' if FLAGS.sharpturn else '0'
    is_verbose = '1' if FLAGS.verbose else '0'
    is_eval = '1' if FLAGS.eval else '0'
    is_constraints = '1' if FLAGS.constraints else '0'
    zuker_subopt = '1' if FLAGS.zuker else '0'
    delta = str(FLAGS.delta)

    path = os.path.dirname(os.path.abspath(__file__))
    cmd = ["%s/%s" % (path, ('bin/linearfold_v' if use_vienna else 'bin/linearfold_c')), beamsize, is_sharpturn, is_verbose, is_eval, is_constraints, zuker_subopt, delta]
    subprocess.call(cmd, stdin=sys.stdin)
    
if __name__ == '__main__':
    setgflags()
    main()

