import os
import json
import argparse
import importlib

import hashFrag.utils.helper_functions as helper

with open(os.path.join(os.path.dirname(__file__),"messages.json"), "r") as f:
    messages_dict = json.load(f)

def main():
    parser = argparse.ArgumentParser(prog="hashFrag",description=messages_dict["hashFrag_description"])
    subparsers = parser.add_subparsers(dest="command")

    # blastn_module
    blast_parser = subparsers.add_parser("blastn_module",description=messages_dict["blastn_module"]["description"],help=messages_dict["blastn_module"]["help"])
    blast_parser.add_argument('-f','--fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["fasta_path"])
    blast_parser.add_argument('--train-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["train_fasta_path"])
    blast_parser.add_argument('--test-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["test_fasta_path"])
    blast_parser.add_argument('-w','--word-size',type=int,default=11,help=messages_dict["blastn_module"]["args"]["word_size"])
    blast_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["blastn_module"]["args"]["gapopen"])
    blast_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["blastn_module"]["args"]["gapextend"])
    blast_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["blastn_module"]["args"]["penalty"])
    blast_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["blastn_module"]["args"]["reward"])
    blast_parser.add_argument('-m','--max-target-seqs',type=int,default=500,help=messages_dict["blastn_module"]["args"]["max_target_seqs"])
    # blast_parser.add_argument('-M','--max_hsps',type=int,default=1,help=messages_dict["blastn_module"]["args"]["max_hsps"])
    blast_parser.add_argument('--exec-makeblastdb-only', action='store_true',help=messages_dict["blastn_module"]["args"]["exec_makeblastdb_only"])
    blast_parser.add_argument('--skip-revcomp',action='store_true', help=messages_dict["blastn_module"]["args"]["skip_revcomp"])
    blast_parser.add_argument('--xdrop-ungap',type=float,default=20,help=messages_dict["blastn_module"]["args"]["xdrop_ungap"])
    blast_parser.add_argument('--xdrop-gap',type=float,default=30,help=messages_dict["blastn_module"]["args"]["xdrop_gap"])
    blast_parser.add_argument('--xdrop-gap-final',type=float,default=100,help=messages_dict["blastn_module"]["args"]["xdrop_gap_final"])
    blast_parser.add_argument('-e','--evalue',type=int,default=10,help=messages_dict["blastn_module"]["args"]["evalue"])
    blast_parser.add_argument('-d','--dust',type=str,default="no",help=messages_dict["blastn_module"]["args"]["dust"])
    blast_parser.add_argument('--blastdb-label',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_label"])
    blast_parser.add_argument('-T','--threads',type=int,default=1,help=messages_dict["blastn_module"]["args"]["threads"])
    blast_parser.add_argument('--force', action='store_true', help=messages_dict["blastn_module"]["args"]["force"])
    blast_parser.add_argument('-o','--output-dir',type=str,default=".",help=messages_dict["blastn_module"]["args"]["output_dir"])
    blast_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.blastn_module").run(args))
    # blast_parser.set_defaults(func=importlib.import_module("blastn_module").run)

    # blastn_array_module
    blast_array_parser = subparsers.add_parser("blastn_array_module",description=messages_dict["blastn_array_module"]["description"],help=messages_dict["blastn_array_module"]["help"])
    blast_array_parser.add_argument('-f','--fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["fasta_path"])
    blast_array_parser.add_argument('--train-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["train_fasta_path"])
    blast_array_parser.add_argument('--test-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["test_fasta_path"])
    blast_array_parser.add_argument('--query-partition-size',type=int,default=500,help=messages_dict["blastn_array_module"]["args"]["query_partition_size"])
    blast_array_parser.add_argument('-w','--word-size',type=int,default=11,help=messages_dict["blastn_module"]["args"]["word_size"])
    blast_array_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["blastn_module"]["args"]["gapopen"])
    blast_array_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["blastn_module"]["args"]["gapextend"])
    blast_array_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["blastn_module"]["args"]["penalty"])
    blast_array_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["blastn_module"]["args"]["reward"])
    blast_array_parser.add_argument('-m','--max-target-seqs',type=int,default=500,help=messages_dict["blastn_module"]["args"]["max_target_seqs"])
    blast_array_parser.add_argument('--exec-makeblastdb-only', action='store_true',help=messages_dict["blastn_module"]["args"]["exec_makeblastdb_only"])
    blast_array_parser.add_argument('--skip-revcomp',action='store_true', help=messages_dict["blastn_module"]["args"]["skip_revcomp"])
    blast_array_parser.add_argument('--xdrop-ungap',type=float,default=20,help=messages_dict["blastn_module"]["args"]["xdrop_ungap"])
    blast_array_parser.add_argument('--xdrop-gap',type=float,default=30,help=messages_dict["blastn_module"]["args"]["xdrop_gap"])
    blast_array_parser.add_argument('--xdrop-gap-final',type=float,default=100,help=messages_dict["blastn_module"]["args"]["xdrop_gap_final"])
    blast_array_parser.add_argument('-e','--evalue',type=int,default=10,help=messages_dict["blastn_module"]["args"]["evalue"])
    blast_array_parser.add_argument('-d','--dust',type=str,default="no",help=messages_dict["blastn_module"]["args"]["dust"])
    blast_array_parser.add_argument('--blastdb-label',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_label"])
    blast_array_parser.add_argument('--force', action='store_true',help=messages_dict["blastn_module"]["args"]["force"])
    blast_array_parser.add_argument('--job-account',type=str,default="",help=messages_dict["blastn_array_module"]["args"]["job_account"])
    blast_array_parser.add_argument('--job-time',type=str,default="24:00:00",help=messages_dict["blastn_array_module"]["args"]["job_time"])
    blast_array_parser.add_argument('--job-memory',type=str,default="16GB",help=messages_dict["blastn_array_module"]["args"]["job_memory"])
    blast_array_parser.add_argument('--num-cpus',type=int,default=1,help=messages_dict["blastn_array_module"]["args"]["num_cpus"])
    blast_array_parser.add_argument('--environment-path',type=str,required=True,help=messages_dict["blastn_array_module"]["args"]["environment_path"])
    blast_array_parser.add_argument('--job-name',type=str,default="hashFrag",help=messages_dict["blastn_array_module"]["args"]["job_name"])
    blast_array_parser.add_argument('--job-scheduler',type=str,default="slurm",help=messages_dict["blastn_array_module"]["args"]["job_scheduler"])
    blast_array_parser.add_argument('--debug',action='store_true',help=messages_dict["blastn_array_module"]["args"]["debug"])
    blast_array_parser.add_argument('--compress',action='store_true',help=messages_dict["blastn_array_module"]["args"]["compress"])
    blast_array_parser.add_argument('-o','--output-dir',type=str,default=".",help=messages_dict["blastn_module"]["args"]["output_dir"])
    blast_array_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.blastn_array_module").run(args))

    # process_blast_results_module
    processing_parser = subparsers.add_parser("process_blast_results_module",description=messages_dict["blastn_module"]["description"],help=messages_dict["blastn_module"]["help"])
    processing_parser.add_argument('--blastn-path',type=str,required=True,help=messages_dict["blastn_module"]["args"]["fasta_path"])
    processing_parser.add_argument('-w','--word-size',type=int,default=11,help=messages_dict["blastn_module"]["args"]["word_size"])
    processing_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["blastn_module"]["args"]["gapopen"])
    processing_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["blastn_module"]["args"]["gapextend"])
    processing_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["blastn_module"]["args"]["penalty"])
    processing_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["blastn_module"]["args"]["reward"])
    processing_parser.add_argument('--processed-blastn-path',type=str,required=True,help=messages_dict["blastn_module"]["args"]["train_fasta_path"])
    processing_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.process_blast_results_module").run(args))

    # filter_candidates_module
    fp_parser = subparsers.add_parser("filter_candidates_module",description=messages_dict["filter_candidates_module"]["description"],help=messages_dict["filter_candidates_module"]["help"])
    fp_parser.add_argument('-i','--input-path',type=str,required=True,help=messages_dict["filter_candidates_module"]["args"]["input_path"])
    fp_parser.add_argument('-t','--threshold',type=float,required=True,help=messages_dict["filter_candidates_module"]["args"]["threshold"])
    fp_parser.add_argument('-o','--output-dir',type=str,required=True,help=messages_dict["filter_candidates_module"]["args"]["output_dir"])
    fp_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.filter_candidates_module").run(args))

    # filter_test_split_module
    filter_parser = subparsers.add_parser("filter_test_split_module",description=messages_dict["filter_test_split_module"]["description"],help=messages_dict["filter_test_split_module"]["help"])
    filter_parser.add_argument('--train-fasta-path',type=str,required=True,help=messages_dict["filter_test_split_module"]["args"]["train_fasta_path"])
    filter_parser.add_argument('--test-fasta-path',type=str,required=True,help=messages_dict["filter_test_split_module"]["args"]["test_fasta_path"])
    filter_parser.add_argument('--hits-path',type=str,required=True,help=messages_dict["filter_test_split_module"]["args"]["hits_path"])
    filter_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.filter_test_split_module").run(args))

    # stratify_test_split_module
    stratify_parser = subparsers.add_parser("stratify_test_split_module",description=messages_dict["stratify_test_split_module"]["description"],help=messages_dict["stratify_test_split_module"]["help"])
    stratify_parser.add_argument('-f','--test-fasta-path',type=str,required=True,help=messages_dict["stratify_test_split_module"]["args"]["test_fasta_path"])
    stratify_parser.add_argument('-i','--input-path',type=str,required=True,help=messages_dict["stratify_test_split_module"]["args"]["input_path"])
    stratify_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["stratify_test_split_module"]["args"]["gapopen"])
    stratify_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["stratify_test_split_module"]["args"]["gapextend"])
    stratify_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["stratify_test_split_module"]["args"]["penalty"])
    stratify_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["stratify_test_split_module"]["args"]["reward"])
    stratify_parser.add_argument('-s','--step',type=int,default=10,help=messages_dict["stratify_test_split_module"]["args"]["step"])
    stratify_parser.add_argument('-o','--output-path',type=str,required=True,help=messages_dict["stratify_test_split_module"]["args"]["output_path"])
    stratify_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.stratify_test_split_module").run(args))

    # identify_homologous_groups_module
    homology_parser = subparsers.add_parser("identify_homologous_groups_module",description=messages_dict["identify_homologous_groups_module"]["description"],help=messages_dict["identify_homologous_groups_module"]["help"])
    homology_parser.add_argument('-i','--hits-path',type=str,required=True,help=messages_dict["identify_homologous_groups_module"]["args"]["hits_path"])
    homology_parser.add_argument('-t','--threshold',type=float,required=True,help=messages_dict["filter_candidates_module"]["args"]["threshold"])
    homology_parser.add_argument('-o','--output-path',type=str,required=True,help=messages_dict["identify_homologous_groups_module"]["args"]["output_path"])
    homology_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.identify_homologous_groups_module").run(args))

    # create_orthogonal_splits_module
    orthosplit_parser = subparsers.add_parser("create_orthogonal_splits_module",description=messages_dict["create_orthogonal_splits_module"]["description"],help=messages_dict["create_orthogonal_splits_module"]["help"])
    orthosplit_parser.add_argument('-i','--homology-path',type=str,required=True,help=messages_dict["create_orthogonal_splits_module"]["args"]["homology_path"])
    orthosplit_parser.add_argument('--p-train',type=float,default=0.8,help=messages_dict["create_orthogonal_splits_module"]["args"]["p_train"])
    orthosplit_parser.add_argument('--p-test',type=float,default=0.2,help=messages_dict["create_orthogonal_splits_module"]["args"]["p_test"])
    orthosplit_parser.add_argument('-n','--n-splits',type=int,default=1,help=messages_dict["create_orthogonal_splits_module"]["args"]["n_splits"])
    orthosplit_parser.add_argument('-s','--seed',type=int,default=21,help=messages_dict["create_orthogonal_splits_module"]["args"]["seed"])
    orthosplit_parser.add_argument('-o','--output-dir',type=str,required=True,help=messages_dict["create_orthogonal_splits_module"]["args"]["output_dir"])
    orthosplit_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.create_orthogonal_splits_module").run(args))

    # create_orthogonal_folds_module
    orthofold_parser = subparsers.add_parser("create_orthogonal_folds_module",description=messages_dict["create_orthogonal_folds_module"]["description"],help=messages_dict["create_orthogonal_splits_module"]["help"])
    orthofold_parser.add_argument('-i','--homology-path',type=str,required=True,help=messages_dict["create_orthogonal_folds_module"]["args"]["homology_path"])
    orthofold_parser.add_argument('-f','--folds',type=int,default=5,help=messages_dict["create_orthogonal_folds_module"]["args"]["folds"])
    orthofold_parser.add_argument('-s','--seed',type=int,default=21,help=messages_dict["create_orthogonal_folds_module"]["args"]["seed"])
    orthofold_parser.add_argument('-o','--output-dir',type=str,required=True,help=messages_dict["create_orthogonal_folds_module"]["args"]["output_dir"])
    orthofold_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.create_orthogonal_folds_module").run(args))

    # filter_existing_splits
    filter_pipeline_parser = subparsers.add_parser("filter_existing_splits",description=messages_dict["filter_existing_splits"]["description"],help=messages_dict["filter_existing_splits"]["help"])

    filter_pipeline_parser.add_argument('--train-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["train_fasta_path"])
    filter_pipeline_parser.add_argument('--test-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["test_fasta_path"])
    filter_pipeline_parser.add_argument('-w','--word-size',type=int,default=11,help=messages_dict["blastn_module"]["args"]["word_size"])
    filter_pipeline_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["blastn_module"]["args"]["gapopen"])
    filter_pipeline_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["blastn_module"]["args"]["gapextend"])
    filter_pipeline_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["blastn_module"]["args"]["penalty"])
    filter_pipeline_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["blastn_module"]["args"]["reward"])
    filter_pipeline_parser.add_argument('-m','--max-target-seqs',type=int,default=500,help=messages_dict["blastn_module"]["args"]["max_target_seqs"])
    filter_pipeline_parser.add_argument('--exec-makeblastdb-only', action='store_true',help=messages_dict["blastn_module"]["args"]["exec_makeblastdb_only"])
    filter_pipeline_parser.add_argument('--skip-revcomp', action='store_true', help=messages_dict["blastn_module"]["args"]["skip_revcomp"])
    filter_pipeline_parser.add_argument('--xdrop-ungap',type=float,default=20,help=messages_dict["blastn_module"]["args"]["xdrop_ungap"])
    filter_pipeline_parser.add_argument('--xdrop-gap',type=float,default=30,help=messages_dict["blastn_module"]["args"]["xdrop_gap"])
    filter_pipeline_parser.add_argument('--xdrop-gap_final',type=float,default=100,help=messages_dict["blastn_module"]["args"]["xdrop_gap_final"])
    filter_pipeline_parser.add_argument('-e','--evalue',type=int,default=10,help=messages_dict["blastn_module"]["args"]["evalue"])
    filter_pipeline_parser.add_argument('-d','--dust',type=str,default="no",help=messages_dict["blastn_module"]["args"]["dust"])
    filter_pipeline_parser.add_argument('-b','--blastdb-args',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_args"])
    filter_pipeline_parser.add_argument('--blastdb-label',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_label"])
    filter_pipeline_parser.add_argument('-B','--blastn-args',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastn_args"])
    filter_pipeline_parser.add_argument('-T','--threads',type=int,default=1,help=messages_dict["blastn_module"]["args"]["threads"])
    filter_pipeline_parser.add_argument('--force', action='store_true', help=messages_dict["blastn_module"]["args"]["force"])
    filter_pipeline_parser.add_argument('-t','--threshold',type=int,required=True,help=messages_dict["filter_candidates_module"]["args"]["threshold"])
    filter_pipeline_parser.add_argument('-o','--output-dir',type=str,default=".",help=messages_dict["blastn_module"]["args"]["output_dir"])
    filter_pipeline_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.filter_existing_splits").run(args))

    # stratify_test_split
    stratify_pipeline_parser = subparsers.add_parser("stratify_test_split",description=messages_dict["stratify_test_split"]["description"],help=messages_dict["stratify_test_split"]["help"])
    stratify_pipeline_parser.add_argument('--train-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["train_fasta_path"])
    stratify_pipeline_parser.add_argument('--test-fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["test_fasta_path"])
    stratify_pipeline_parser.add_argument('-w','--word_size',type=int,default=11,help=messages_dict["blastn_module"]["args"]["word_size"])
    stratify_pipeline_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["blastn_module"]["args"]["gapopen"])
    stratify_pipeline_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["blastn_module"]["args"]["gapextend"])
    stratify_pipeline_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["blastn_module"]["args"]["penalty"])
    stratify_pipeline_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["blastn_module"]["args"]["reward"])
    stratify_pipeline_parser.add_argument('-m','--max-target-seqs',type=int,default=500,help=messages_dict["blastn_module"]["args"]["max_target_seqs"])
    stratify_pipeline_parser.add_argument('--exec-makeblastdb-only', action='store_true',help=messages_dict["blastn_module"]["args"]["exec_makeblastdb_only"])
    stratify_pipeline_parser.add_argument('--skip-revcomp', action='store_true', help=messages_dict["blastn_module"]["args"]["skip_revcomp"])
    stratify_pipeline_parser.add_argument('--xdrop-ungap',type=float,default=20,help=messages_dict["blastn_module"]["args"]["xdrop_ungap"])
    stratify_pipeline_parser.add_argument('--xdrop-gap',type=float,default=30,help=messages_dict["blastn_module"]["args"]["xdrop_gap"])
    stratify_pipeline_parser.add_argument('--xdrop-gap_final',type=float,default=100,help=messages_dict["blastn_module"]["args"]["xdrop_gap_final"])
    stratify_pipeline_parser.add_argument('-e','--evalue',type=int,default=10,help=messages_dict["blastn_module"]["args"]["evalue"])
    stratify_pipeline_parser.add_argument('-d','--dust',type=str,default="no",help=messages_dict["blastn_module"]["args"]["dust"])
    stratify_pipeline_parser.add_argument('-b','--blastdb-args',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_args"])
    stratify_pipeline_parser.add_argument('--blastdb-label',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_label"])
    stratify_pipeline_parser.add_argument('-B','--blastn-args',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastn_args"])
    stratify_pipeline_parser.add_argument('-T','--threads',type=int,default=1,help=messages_dict["blastn_module"]["args"]["threads"])
    stratify_pipeline_parser.add_argument('--force', action='store_true', help=messages_dict["blastn_module"]["args"]["force"])
    stratify_pipeline_parser.add_argument('-o','--output-dir',type=str,default=".",help=messages_dict["blastn_module"]["args"]["output_dir"])
    stratify_pipeline_parser.add_argument('-s','--step',type=int,default=10,help=messages_dict["stratify_test_split_module"]["args"]["step"])
    stratify_pipeline_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.stratify_test_split").run(args))

    # create_orthogonal_splits
    orthosplit_pipeline_parser = subparsers.add_parser("create_orthogonal_splits",description=messages_dict["create_orthogonal_splits"]["description"],help=messages_dict["create_orthogonal_splits"]["help"])
    orthosplit_pipeline_parser.add_argument('-f','--fasta-path',type=str,default=None,help=messages_dict["blastn_module"]["args"]["fasta_path"])
    orthosplit_pipeline_parser.add_argument('-w','--word_size',type=int,default=11,help=messages_dict["blastn_module"]["args"]["word_size"])
    orthosplit_pipeline_parser.add_argument('-g','--gapopen',type=int,default=2,help=messages_dict["blastn_module"]["args"]["gapopen"])
    orthosplit_pipeline_parser.add_argument('-x','--gapextend',type=int,default=1,help=messages_dict["blastn_module"]["args"]["gapextend"])
    orthosplit_pipeline_parser.add_argument('-p','--penalty',type=int,default=-1,help=messages_dict["blastn_module"]["args"]["penalty"])
    orthosplit_pipeline_parser.add_argument('-r','--reward',type=int,default=1,help=messages_dict["blastn_module"]["args"]["reward"])
    orthosplit_pipeline_parser.add_argument('-m','--max-target-seqs',type=int,default=500,help=messages_dict["blastn_module"]["args"]["max_target_seqs"])
    orthosplit_pipeline_parser.add_argument('--exec-makeblastdb-only', action='store_true',help=messages_dict["blastn_module"]["args"]["exec_makeblastdb_only"])
    orthosplit_pipeline_parser.add_argument('--skip-revcomp', action='store_true', help=messages_dict["blastn_module"]["args"]["skip_revcomp"])
    orthosplit_pipeline_parser.add_argument('--xdrop-ungap',type=float,default=20,help=messages_dict["blastn_module"]["args"]["xdrop_ungap"])
    orthosplit_pipeline_parser.add_argument('--xdrop-gap',type=float,default=30,help=messages_dict["blastn_module"]["args"]["xdrop_gap"])
    orthosplit_pipeline_parser.add_argument('--xdrop-gap_final',type=float,default=100,help=messages_dict["blastn_module"]["args"]["xdrop_gap_final"])
    orthosplit_pipeline_parser.add_argument('-e','--evalue',type=int,default=10,help=messages_dict["blastn_module"]["args"]["evalue"])
    orthosplit_pipeline_parser.add_argument('-d','--dust',type=str,default="no",help=messages_dict["blastn_module"]["args"]["dust"])
    orthosplit_pipeline_parser.add_argument('-b','--blastdb-args',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_args"])
    orthosplit_pipeline_parser.add_argument('--blastdb-label',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastdb_label"])
    orthosplit_pipeline_parser.add_argument('-B','--blastn-args',type=str,default=None,help=messages_dict["blastn_module"]["args"]["blastn_args"])
    orthosplit_pipeline_parser.add_argument('-T','--threads',type=int,default=1,help=messages_dict["blastn_module"]["args"]["threads"])
    orthosplit_pipeline_parser.add_argument('-t','--threshold',type=int,required=True,help=messages_dict["filter_candidates_module"]["args"]["threshold"])
    orthosplit_pipeline_parser.add_argument('--p-train',type=float,default=0.8,help=messages_dict["create_orthogonal_splits_module"]["args"]["p_train"])
    orthosplit_pipeline_parser.add_argument('--p-test',type=float,default=0.2,help=messages_dict["create_orthogonal_splits_module"]["args"]["p_test"])
    orthosplit_pipeline_parser.add_argument('-n','--n-splits',type=int,default=1,help=messages_dict["create_orthogonal_splits_module"]["args"]["n_splits"])
    orthosplit_pipeline_parser.add_argument('-s','--seed',type=int,default=21,help=messages_dict["create_orthogonal_splits_module"]["args"]["seed"])
    orthosplit_pipeline_parser.add_argument('--force', action='store_true', help=messages_dict["blastn_module"]["args"]["force"])
    orthosplit_pipeline_parser.add_argument('-o','--output-dir',type=str,default=".",help=messages_dict["create_orthogonal_splits_module"]["args"]["output_dir"])
    orthosplit_pipeline_parser.set_defaults(func=lambda args: importlib.import_module("hashFrag.modules.create_orthogonal_splits").run(args))
    
    args = parser.parse_args()

    helper.instantiate_logger()

    if hasattr(args, 'func'):
        args.func(args)
    else:
        parser.print_help()

if __name__ == "__main__":
    main()
