#!/usr/bin/python3
# This one really is Python 3 specific, though it could be modified for Python 2 easily.

import sys
import subprocess as subprocess_mod

def usage(retval):
    sys.stderr.write("{} --save-directory /save/dir --help\n".format(sys.argv[0]))
    sys.exit(retval)

def main():
    save_directory = ""

    while sys.argv[1:]:
        if sys.argv[1] == '--save-directory':
            save_directory = sys.argv[2]
            del sys.argv[1]
        elif sys.argv[1] in [ '-h', '--help' ]:
            usage(0)
        else:
            sys.stderr.write('{}: Unrecognized option: {}\n'.format(sys.argv[0], sys.argv[1]))
            usage(1)
        del sys.argv[1]

    if save_directory == '':
        sys.stderr.write("{}: --save-directory is a required option\n".format(sys.argv[0]))
        usage(1)

    subprocess = subprocess_mod.Popen([ 'backshift', '--save-directory', save_directory, '--list-backups' ], stdout=subprocess_mod.PIPE)

    most_recent = {}
    num_fields = 4

    for backup_description in subprocess.stdout:
        fields = backup_description.split()
        fields2 = [ str(field, 'ISO-8859-1') for field in fields ]
        (backup_id, start_ctime, file_count, finish_time) = fields2
        #1387040404.46_dstromberg-laptop_just-slash_sat-dec-14-09-00-04-2013_bfbd278d27a995f5
        subfields = backup_id.split('_')
        key = (subfields[1], subfields[2])
        if int(file_count) >= 2 and finish_time != 'None':
            most_recent[key] = fields2

    widths = [ 0 for fieldno in range(num_fields) ]
    for fields in most_recent.values():
        for fieldno in range(num_fields):
            if len(fields[fieldno]) > widths[fieldno]:
                widths[fieldno] = len(fields[fieldno])
        
    keys = list(most_recent)
    keys.sort()

    metaformats = [ '{{:<{}}}', '{{:<{}}}', '{{:>{}}}', '{{:<{}}}' ]
    for key in keys:
        fields = []
        for fieldno in range(num_fields):
            format_string = metaformats[fieldno].format(widths[fieldno])
            fields.append(format_string.format(most_recent[key][fieldno]))
        line = ' '.join(fields)
        sys.stdout.write(line + '\n')

main()