#! /usr/bin/env python


from __future__ import print_function
import six
import argparse, sys
import pandas as pd
try:
    from mothulity import __version__
except ImportError:
    __version__ = "development"
try:
    from mothulity import utilities as mut
except ImportError:
    import utilities as mut


def main():
    parser = argparse.ArgumentParser(
        prog="mothur_files_creator",
        usage="mothur_files_creator [directory] [OPTION]",
        description="""
        create mothur-suitable <.files> file just upon the input file names.
        Removes <-> from file names.
        """,
    )
    parser.add_argument(
        "-v",
        "--version",
        action="version",
        version=__version__,
    )
    parser.add_argument(
        action="store",
        dest="files_directory",
        metavar="path/to/files",
        help="input directory path.",
    )
    parser.add_argument(
        "-o",
        "--output",
        action="store",
        dest="output_file_name",
        metavar="",
        default="mothur.files",
        help="output file name. Default <mothur.files>",
    )
    parser.add_argument(
        "-s",
        "--split-sign",
        action="store",
        dest="split_sign",
        metavar="",
        default="_",
        help="""
        first group of characters before this sign is recognized as
        sample name. Default <_>.
        """,
    )
    parser.add_argument(
        "-e",
        "--files-extension",
        action="store",
        dest="files_extension",
        metavar="",
        default="fastq",
        help="reads files are recognized by this. Default <fastq>",
    )
    parser.add_argument(
        "-l",
        "--left-reads-sign",
        action="store",
        dest="left_reads_sign",
        metavar="",
        default="R1",
        help="left reads files are recognized by this. Default <R1>",
    )
    parser.add_argument(
        "-r",
        "--right-reads-sign",
        action="store",
        dest="right_reads_sign",
        metavar="",
        default="R2",
        help="right reads files are recognized by this. Default <R2>",
    )
    parser.add_argument(
        "--original-names",
        action="store_true",
        dest="original_names",
        default=False,
        help="do not modify file names.",
    )

    if len(sys.argv)==1:
        parser.print_help()
        parser.exit()

    try:
        args = parser.parse_args()
    except SystemExit as error:
        if error.code == 2:
            parser.print_help()
        parser.exit()

    if args.original_names is False:
        mut.names_sanitizer(args.files_directory,
                            "-")
    else:
        pass
    left_n_right = mut.left_n_right_generator(args.files_directory,
                                          args.split_sign,
                                          args.files_extension,
                                          args.left_reads_sign,
                                          args.right_reads_sign)
    files_dataframe = pd.merge(left=pd.DataFrame(left_n_right["left"]),
                               right=pd.DataFrame(left_n_right["right"]),
                               on="name")
    files_dataframe[["name", "left_reads", "right_reads"]].to_csv(args.output_file_name,
                                                                  sep="\t",
                                                                  index=False,
                                                                  header=False)


if __name__ == "__main__":
    main()
