#!/usr/bin/env python3
# code=UTF-8
# Copyright 2013-2014 James P Goodwin bkp@jlgoodwin.com
# Copyright 2013 James P Goodwin bkp backup to s3 tool
# This is a backup program created by James
import sys
import os
import re
from optparse import OptionParser
from bkp_core import bkp_mod
from bkp_core import bkp_conf
import traceback
import signal
from bkp_core.util import mail_error

def main(options, args):
    """ The main driver for the bkp utility """
    os.set_blocking(sys.stderr.fileno(),1)

    if options.configure:
        return bkp_conf.configure()

    config =  bkp_conf.config(options.config_file)

    try:
        if options.compact:
            return bkp_mod.compact(config, options.dryrun, options.verbose)

        if options.list:
            return bkp_mod.list(config, options.verbose)

        bkp_job = bkp_mod.BackupJob(config)

        if options.dryrun:
            bkp_job.set_dryrun(True)

        if options.verbose:
            bkp_job.set_verbose(True)

        if options.restart_file:
            return bkp_job.restart(options.restart_file)

        return bkp_job.backup()
    except:
        tb = traceback.format_exc()
        print(tb, file=sys.stderr)
        mail_error( tb, None, options.verbose, lambda: config )
        return 1

if __name__ == '__main__':
    parser = OptionParser(usage="usage: %prog [options]", description="A backup script for backing up files to {s3,file, or sftp}, configuration in ~/.bkp/bkp_config")
    parser.add_option("-c","--configure", dest="configure", action="store_true", default=False, help="Prompt to create initial ~/.bkp/bkp_config")
    parser.add_option("-v","--verbose", dest="verbose", action="store_true", default=False, help="Log all activity to console")
    parser.add_option("-d","--dryrun", dest="dryrun", action="store_true", default=False, help="Do everything except actually perform actions")
    parser.add_option("-f","--file", dest="config_file",default="~/.bkp/bkp_config", help="Load config from this file default is ~/.bkp/bkp_config")
    parser.add_option("-r","--restart", dest="restart_file",default="",help="Restart backup from this backup log file")
    parser.add_option("-K","--compact", dest="compact",action="store_true",default=False,help="Clean out empty backup directories")
    parser.add_option("-l","--list", dest="list",action="store_true",default=False,help="list the files backed up for this machine and dates available")

    (options,args) = parser.parse_args()

    exit(main(options,args))
