#!python
import os.path
import argparse
import sys
from dnazip import compress, decompress
# https://docs.python.org/3/library/argparse.html
# Similar to gzip's arguments
parser = argparse.ArgumentParser(description='Compress FASTA files, using 2 bits per base. If no input file is given, standard input is used')
parser.add_argument('FILE', nargs='?', help='Input file name', default='stdin') # If no input is given, use stdin
parser.add_argument('-l', '--linelength', help='Characters per line', default=60, type=int)
parser.add_argument('-d', '--decompress', help='Decompress file', action='store_true') # True or False Flag
parser.add_argument('-c', '--stdout', help='Write to standard output', action='store_true')
parser.add_argument('--debug', help='Show debugging statements', action='store_true')

args = parser.parse_args()

debug = args.debug
if debug:
    print('Showing debug info')

inputFilename = args.FILE

outputFilename = '' # Determined below
if args.FILE == 'stdin' or args.stdout:
    outputFilename = 'stdout'
else: # calculate output filename
    inputFilenameParts = args.FILE.split('.')
    if len(inputFilenameParts) == 1: # no extension present, add a placeholder
        inputFilenameParts.append('.txt') # This will be removed
    if args.decompress:
        outputFilename = '.'.join(inputFilenameParts[:-1]) + '.out.fa' # Remove old extension and add .fa
    else:
        outputFilename = '.'.join(inputFilenameParts[:-1]) + '.dnazip' # Remove old extension and add .dnazip

if debug:
    print('Reading from: {}'.format(inputFilename))
    print('Writing to: {}'.format(outputFilename))

if os.path.exists(outputFilename): # Don't overwrite important files
    print('The output file already exists, do you want to overwrite it? Y/n')
    anwser = input()
    if anwser.upper() != 'Y':
        print('Aborting')
        exit()


if args.decompress:
    # Do some magic to open a filehandle to stdin
    inputFile = sys.stdin.buffer if inputFilename == 'stdin' else open(inputFilename, 'rb')
    outputFile = sys.stdout if outputFilename == 'stdout' else open(outputFilename, 'w')
    
    decompress(inputFile, outputFile, args.linelength)
    if debug:
        print('Done decompressing')
else:
    if inputFilename.endswith('.dnazip'):
        print('Are you sure you want to compress a .dnazip file? Y/n')
        anwser = input()
        if anwser.upper() != 'Y':
            print('Aborting, use -d for decompression')
            exit()
    # Same thing as above
    inputFile = sys.stdin if inputFilename == 'stdin' else open(inputFilename, 'r')
    outputFile = sys.stdout.buffer if outputFilename == 'stdout' else open(outputFilename, 'wb')

    compress(inputFile, outputFile)
    if debug:
        print('Done compressing')