#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Copyright (C) 2010 - 2012, A. Murat Eren
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# Please read the COPYING file.

import sys

import Oligotyping.lib.fastalib as u
from Oligotyping.utils.utils import pretty_print as pp


def main(input_fasta, trim_from = 0, trim_to = sys.maxint, min_length = 0, output = None):
    if not output:
        output = input_fasta + '.TRIMMED.fa'

    fasta = u.SequenceSource(input_fasta)
    output = u.FastaOutput(output)
    
    while fasta.next():
        if fasta.pos % 1000 == 0:
            sys.stderr.write('\rreads processed so far: %s' % (pp(fasta.pos)))
            sys.stderr.flush()

        if len(fasta.seq) < min_length:
            continue

        output.write_id(fasta.id)
        output.write_seq(fasta.seq[trim_from:trim_to])

    fasta.close()
    output.close()
    sys.stderr.write('\n')


if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description='Trim FASTA file')
    parser.add_argument('input_fasta', metavar = 'FILE',
                        help = 'FASTA file to subsample')
    parser.add_argument('--trim-from', metavar = 'INTEGER', type = int, default = 0,
                        help = 'Start position')
    parser.add_argument('--trim-to', metavar = 'INTEGER', type = int, default = sys.maxint,
                        help = 'End position')
    parser.add_argument('--min-length', metavar = 'INTEGER', type = int, default = 0,
                        help = 'Minimum lenght of a read to be kept')
    parser.add_argument('-o', '--output', metavar = 'FILE_FILE_PATH', default = None,
                        help = 'Output file name.')

    args = parser.parse_args()


    sys.exit(main(args.input_fasta, args.trim_from, args.trim_to, args.min_length, args.output))

