#!/usr/bin/env python3
import subprocess
import logging
import os

def compress_file_fast(path, archive_path):
    if os.path.exists('/usr/bin/pigz'):
        subprocess.check_call("pigz < {} > {}".format(path, archive_path), shell=True)
    else:
        subprocess.check_call("gzip < {} > {}".format(path, archive_path), shell=True)


def compress_fast(path, archive_path, exclude=None):
    pigz_part = ''
    if os.path.exists('/usr/bin/pigz'):
        logging.info("pigz found, will compress and decompress faster")
        pigz_part = "--use-compress-program='pigz'"
    else:
        pigz_part = '-z'
        logging.info("no pigz, compressing with default tar")

    if exclude is None:
        exclude_part = ""
    elif isinstance(exclude, list):
        exclude_part = " ".join(["--exclude {}".format(x) for x in exclude])
    else:
        exclude_part = "--exclude {}".format(str(exclude))

    fname = os.path.basename(path)
    if os.path.isfile(path):
        path = os.path.dirname(path)
    else:
        path += "/.."
    cmd = "tar {} {} -cf {} -C {} {}".format(pigz_part, exclude_part, archive_path, path, fname)
    logging.debug("compress_fast cmd: %s", cmd)
    subprocess.check_call(cmd, shell=True)


def decompress_fast(archive_path, result_path=None):
    pigz_part = ''
    if os.path.exists('/usr/bin/pigz'):
        logging.info("pigz found, will compress and decompress faster ('%s' -> '%s')", archive_path, result_path)
        pigz_part = "--use-compress-program='pigz'"
    else:
        pigz_part = '-z'
        logging.info("no pigz, decompressing with default tar ('%s' -> '%s')", archive_path, result_path)

    if result_path is None:
        subprocess.check_call("tar {} -xf {}".format(pigz_part, archive_path), shell=True)
    else:
        subprocess.check_call("tar {} -xf {} -C {}".format(pigz_part, archive_path, result_path), shell=True)