#!/usr/bin/env python

# core
import argparse
import logging
import os
import sys

# local
from cathpy.core.util import AlignmentSummary, AlignmentSummaryRunner

parser = argparse.ArgumentParser(
    description="Provide summary stats for alignments")

input_group = parser.add_mutually_exclusive_group(required=True)
input_group.add_argument('-d', '--aln_dir', type=str, dest='aln_dir',
                         help='input alignment directory')
input_group.add_argument('-i', '--aln_file', type=str, dest='aln_file',
                         help='input alignment file')

parser.add_argument('-f', type=str, choices=AlignmentSummaryRunner.VALID_ALN_FORMATS,
                    dest='aln_format', default='fasta',
                    help=f'alignment file format (default: fasta)')

parser.add_argument('--suffix', type=str, dest='suffix', default=None,
                    help='suffix to use when matching alignment files (default: .faa)')

parser.add_argument('--skipempty', default=False, action="store_true",
                    help='skip empty files')

parser.add_argument('-r', '--recursive', default=True, action="store_true",
                    help='recursive search')

parser.add_argument('--verbose', '-v', required=False, action='count', default=0,
                    help='more verbose logging')

if __name__ == '__main__':
    args = parser.parse_args()

    if args.verbose >= 2:
        log_level = logging.DEBUG
    elif args.verbose >= 1:
        log_level = logging.INFO
    else:
        log_level = logging.WARN

    logging.basicConfig(
        level=log_level, format='%(asctime)s %(levelname)-8s | %(message)s')

    merged_args = dict([(key, vars(args)[key]) for key in (
        'aln_dir', 'aln_file', 'aln_format', 'suffix', 'skipempty', 'recursive')])

    aln_sum = AlignmentSummaryRunner(**merged_args)
    entries = aln_sum.run()

    print("# " + "\t".join(AlignmentSummary.col_names()))
    for e in entries:
        print(e.to_string())

    logging.info('DONE')
