import argparse
import asyncio
from os import path

from nsbdiagnosistoolkit.cli import aggregator
from nsbdiagnosistoolkit.engine.data.genomics import NamedString
from nsbdiagnosistoolkit.engine.local.abif import read_abif
from nsbdiagnosistoolkit.engine.local.csv import write_mlst_profiles_as_csv
from nsbdiagnosistoolkit.engine.local.fasta import read_fasta


parser = argparse.ArgumentParser()
parser.add_argument(
    "--fasta", "-fa", "-fst",
    nargs="+",
    action='extend',
    dest="fastas",
    required=False,
    default=[],
    type=str,
    help="The FASTA files to process. Multiple can be listed."
)
parser.add_argument(
    "--abif", "-abi", "-ab1",
    action='extend',
    dest="abifs",
    required=False,
    default=[],
    type=str,
    help="The ABIF files to process. Multiple can be listed."
)
parser.add_argument(
    "--institut-pasteur-mlst",
    "-ipdbmlst",
    dest="institut_pasteur_db",
    type=str,
    help="The Institut Pasteur MLST database to use."
)
parser.add_argument(
    "-csv",
    dest="csv_path",
    required=False,
    default=None,
    help="The destination to place the CSV output."
)


def cli():
    args = parser.parse_args()
    gen_strings = aggregator.aggregate_sequences(args.fastas, args.abifs)
    mlst_profiles = aggregator.profile_all_genetic_strings(
        gen_strings, args.institut_pasteur_db)
    asyncio.run(write_mlst_profiles_as_csv(
        asyncio.run(mlst_profiles), str(args.csv_path)))


if __name__ == "__main__":
    cli()