"""
uses R for statistics and graphics
"""

import os.path as op
import os
import sys

from string import Template

from jcvi.formats.base import must_open
from jcvi.apps.base import OptionParser, ActionDispatcher, sh


class RTemplate (object):
    """
    Creates a R script and runs it
    """
    def __init__(self, template, parameters):

        self.template = Template(template)
        self.parameters = parameters

    def run(self, clean=True):
        """
        Create a temporary file and run it
        """
        template = self.template
        parameters = self.parameters
        # write to a temporary R script
        fw = must_open("tmp", "w")
        path = fw.name

        fw.write(template.safe_substitute(**parameters))
        fw.close()

        sh("Rscript %s" % path)
        if clean:
            os.remove(path)
            # I have no idea why using ggsave, there is one extra image
            # generated, but here I remove it
            rplotspdf = "Rplots.pdf"
            if op.exists(rplotspdf):
                os.remove(rplotspdf)


def main():

    actions = (
        ('rdotplot', 'dot plot based on lastz rdotplot output'),
            )
    p = ActionDispatcher(actions)
    p.dispatch(globals())


def rdotplot(args):
    """
    %prog rdotplotfile

    Dot plot to visualize relationship between two sequences, by plotting
    .rdotplot file (often generated by LASTZ)
    """
    p = OptionParser(rdotplot.__doc__)
    opts, args = p.parse_args(args)

    if len(args) != 1:
        sys.exit(not p.print_help())

    dotplot_template = """
    dots <- read.table('$rdotplotfile', header=T)
    png('$pngfile')
    plot(dots, type='l')
    dev.off()
    """

    rdotplotfile, = args
    assert rdotplotfile.endswith(".rdotplot")
    pngfile = rdotplotfile.replace(".rdotplot", ".png")

    rtemplate = RTemplate(dotplot_template, locals())
    rtemplate.run()


if __name__ == '__main__':
    main()
