#!/usr/bin/env python
#
#    Copyright (c) 2016, 2017 Timothy Savannah All Rights Reserved
#  under terms of the GPL version 2. You should have recieved a copy of this with distribution,
#  as LICENSE. You may also find the full text at https://github.com/kata198/popLines/LICENSE
#

#  This program turns files into queues. You can pop off the head of a file to stdout
#   So your file can contain a list of items to process, and you can use this to pop off that queue.
#
#  You can also peek (not modify the source) with "--peek"

#vim: set ts=4 sw=4 expandtab
import os
import sys

from PopLines import popHead

def printUsage():
    sys.stderr.write('''Usage: popHead (Options) [number of lines] [filename]

  Options:

     --peek        Perform the operation, but don't modify the source file

Removes the given number of lines from the top of provided file, returning on stdout.

If the "number of lines" is negative ( -N ), popHead  will pop lines,
  starting at the head (start), and stopping at the Nth-to-last-line.
For example, if "number of lines" is -2 on a 5 line file, the first 3 will be popped.

Use this program to turn a list into a queue.
''')

if __name__ == '__main__':

    args = sys.argv[1:]

    if '--help' in args:
        printUsage()
        sys.exit(1)

    if '--peek' in args:
        saveChanges = False
        args.remove('--peek')
    else:
        saveChanges = True


    if len(args) != 2:
        sys.stderr.write('Wrong number of arguments.\n\n')
        printUsage()
        sys.exit(1)

    numLines = args[0]
    if not numLines.isdigit() and not (numLines.startswith('-') and numLines[1:].isdigit()):
        sys.stderr.write('Number of lines (second argument) must be an integer.\n\n')
        printUsage()
        sys.exit(1)

    numLines = int(numLines)

    filename = args[1]
    if not os.path.exists(filename):
        sys.stderr.write('No such file: %s\n' %(filename,))
        sys.exit(2)
    if not os.path.isfile(filename):
        sys.stderr.write('Not a file: %s\n' %(filename,))
        sys.exit(2)

    try:
        output = popHead(numLines, filename, saveChanges)
    except Exception as e:
        sys.stderr.write('Error: %s\n' %(str(e,)))
        sys.exit(2)

    if len(output) > 0:
        sys.stdout.write('\n'.join(output))
        sys.stdout.write('\n')

