#!/usr/bin/env python
from shutil import copytree, rmtree
import logging
from os.path import isdir
from optparse import OptionParser
import samba.getopt as options
from samba.netcmd import domain_backup
from sys import argv

LOG = argv[1]
WHERE = argv[2]
SERVER = argv[3]

if len(argv) == 5 and argv[4] == 'cron':
    BAREOS_MODE = False
else:
    BAREOS_MODE = True


parse = OptionParser()

def copy_certif(logger, tmpdir):
    logger.info('Copy certificats')
    rmtree(tmpdir + '/private/tls')
    copytree('/var/lib/samba/private/tls/', tmpdir + '/private/tls')

ori_create_backup_tar = domain_backup.create_backup_tar

if BAREOS_MODE:
    def fake_create_backup_tar(logger, tmpdir, backup_filepath):
        # do not tar file, just copy it
        logger.info("Copy backup file")
        copy_certif(logger, tmpdir)
        dest_dir = WHERE + '/bareos'
        if isdir(dest_dir):
            rmtree(dest_dir)
        copytree(tmpdir, dest_dir)
else:
    def fake_create_backup_tar(logger, tmpdir, backup_filepath):
        copy_certif(logger, tmpdir)
        ori_create_backup_tar(logger, tmpdir, backup_filepath)


class cmd_domain_backup_online(domain_backup.cmd_domain_backup_online):
    def get_logger(self):
        logFormatter = logging.Formatter("%(asctime)s [%(levelname)-5.5s]  %(message)s")
        logger = logging.getLogger('samba_backup')
        fhlogger = logging.FileHandler(LOG)
        fhlogger.setFormatter(logFormatter)
        logger.addHandler(fhlogger)
        return logger


domain_backup.create_backup_tar = fake_create_backup_tar
backup = cmd_domain_backup_online()
backup.run(sambaopts=options.SambaOptions(parse),
           credopts=options.CredentialsOptions(parse),
           server=SERVER,
           targetdir=WHERE)
