#!/usr/bin/env python3

import argparse
from lrgasp import handle_prog_errors, prog_error_excepts
from lrgasp import read_model_map_data, model_data, de_novo_rna_data, entry_validate
from lrgasp import loggingOps

def parse_args():
    desc = """Validate that an LRGASP read model map TSV meets requirements
    and optionally check that it is consistent with a model file.

    Use --logDebug when reporting a problem.
    """
    parser = argparse.ArgumentParser(description=desc)
    loggingOps.addCmdOptions(parser)
    parser.add_argument("--models_gtf",
                        help="optional reference GTF model file to compare against")
    parser.add_argument("--rna_fasta",
                        help="optional de novo RNA fasta file to compare against")
    parser.add_argument("read_model_map_tsv",
                        help="TSV for read_model_map")
    args = parser.parse_args()
    if (args.models_gtf is not None) and (args.rna_fasta is not None):
        parser.error("it makes not sense to specify both --models_gtf and --rna_fasta")
    return args

def main(args):
    loggingOps.setupFromCmd(args)
    try:
        read_model_map = read_model_map_data.load(args.read_model_map_tsv)
        if args.models_gtf is not None:
            models = model_data.load(args.models_gtf)
            entry_validate.validate_ref_model_and_read_mapping(models, read_model_map)
        if args.rna_fasta is not None:
            de_novo_rna_ids = de_novo_rna_data.load(args.rna_fasta)
            entry_validate.validate_de_novo_rna_and_read_mapping(de_novo_rna_ids, read_model_map)

    except prog_error_excepts as ex:
        handle_prog_errors(ex)

main(parse_args())
