#!/usr/bin/env python
import argparse
import csv
import os
import sys

from immunedb.identification.metadata import REQUIRED_FIELDS

if __name__ == '__main__':
    parser = argparse.ArgumentParser('Generates a template metadata file')
    parser.add_argument('--path', default='.', help='The directory in which '
                        'the FASTA or FASTQ files exist.')
    parser.add_argument('--out', default='metadata.tsv', help='Path to '
                        'output file.  Use - for stdout.')
    parser.add_argument('--use-filenames', action='store_true',
                        help='Sets the sample name for each file to the '
                        'filename without the .fasta or .fastq extension '
                        '(e.g. sample1.fasta would be given the sample name '
                        'sample1)')
    args = parser.parse_args()

    files = [os.path.basename(f) for f in os.listdir(args.path)
             if '.fasta' in f or '.fastq' in f or '.tsv' in f]
    if not files:
        parser.error('No FASTA, FASTQ, or TSV files.')

    with sys.stdout if args.out == '-' else open(args.out, 'w+') as fh:
        writer = csv.DictWriter(
            fh,
            fieldnames=REQUIRED_FIELDS,
            delimiter='\t')

        writer.writeheader()
        for fn in files:
            name, ext = os.path.splitext(fn)
            row = {'file_name': fn}
            if args.use_filenames:
                row['sample_name'] = name
            writer.writerow(row)
