#!/usr/bin/env python3
"""Report on assembly quality for miniasm-generated GFA assembly

Example usage:
    ./assembly_evaluation.py --gfa_filepath assembly.fa --reference_filepath ref.fa
"""

from __future__ import print_function
from __future__ import division

import argparse
import os
import subprocess
import tempfile
import uuid


def report_assembly(gfa_filepath, reference_filepath):
    """
    Uses QUAST to generate a report on the assembly
    """

    assembly_tmpfile_path = os.path.join(tempfile.mkdtemp(), str(uuid.uuid4()) + ".fa")
    cmd = """awk '/^S/{{print ">"$2"\\n"$3}}' {} | fold > {}""".format(gfa_filepath, assembly_tmpfile_path)
    print("command:")
    print(cmd)
    subprocess.call(cmd, shell=True)

    quast_output_dir = tempfile.gettempdir()
    cmd = "quast.py {} -r  {} -o {}".format(assembly_tmpfile_path, reference_filepath, quast_output_dir)
    subprocess.call(cmd, shell=True)

    report_textfile = os.path.join(quast_output_dir, "report.txt")

    with open(report_textfile, "r") as f:
        data = f.read()
    print(data)


def main():
    parser = argparse.ArgumentParser(description="Report on assembly quality for miniasm-generated GFA assembly")

    parser.add_argument('--gfa_filepath',
                        type=str,
                        required=True)
    parser.add_argument('--reference_filepath',
                        type=str,
                        required=True)

    args = parser.parse_args()

    report_assembly(args.gfa_filepath, args.reference_filepath)


if __name__ == '__main__':
    main()
