#!/usr/bin/env python
import sys
import os
import argparse
import GEOparse


def parse(args):

    description = """
    gsm2fastq v0.1
    """

    p = argparse.ArgumentParser(
        description=description
    )

    p.add_argument("term",
                   help="GEO accession",
                   metavar="GSM"
                   )
    p.add_argument("email",
                   help="e-mail address for Entrez API",
                   metavar="EMAIL"
                   )
    p.add_argument("-o", "--outdir",
                   dest="outdir",
                   help="output directory",
                   metavar="DIR",
                   default="./"
                   )
    p.add_argument("-f", "--filetype",
                   dest="filetype",
                   help="filetype (fastq or sra)",
                   metavar="TYPE",
                   default="fastq"
                   )
    p.add_argument("-j", "--jobs",
                   help="number of threads/jobs for the fastq dump",
                   metavar="NRTHREADS",
                   default=4
                   )
    return p.parse_args(args)


if __name__ == "__main__":
    args = parse(sys.argv[1:])
    if not args.term.startswith("GSM"):
        raise NotImplementedError("only GSM ids work for now!")
    gsm = GEOparse.get_GEO(args.term)
    title = gsm.metadata.get("title", [])[0]
    gsm.download_SRA(
            args.email,
            directory=args.outdir,
            filetype=args.filetype,
            threads=args.jobs,
            aspera="ASPERA_HOME" in os.environ,
            )
    print("Supp_{}_{}".format(gsm.name, title))
