#!/bin/bash

# Error handling
set -e

# For styling/colorizing output
txtbld=$(tput bold)
txtblue=${txtbld}$(tput setaf 4)
txtred=${txtbld}$(tput setaf 1)
txtgreen=${txtbld}$(tput setaf 2)
txtyellow=${txtbld}$(tput setaf 3)
txtwhite=${txtbld}$(tput setaf 7)

# Dependency check
function dependencycheck()
{
    numdependencies="$#"
    dependencies=("$@")
    missingdependencies=0

    for ((i = 0; i < numdependencies; i++)) ; do
        if ! command -v "${dependencies[$i]}" &> /dev/null ; then
            echo "${txtred}  dependency not met: ${dependencies[$i]}${txtwhite}"
            missingdependencies=$((missingdependencies+1))
        fi
    done

    if [ $missingdependencies -gt 0 ] ; then
        exit 1
    fi
}

# Main Dependency check
dependencycheck echo sed

# Intro Prompt
echo "${txtgreen}xpress: a simple shell script for compressing common file formats"

# Reset output style
tput bold & tput setaf 7

if [ "${1}" == "-tar" ] ; then
        dependencycheck tar
        echo "${txtblue}compressing .tar...${txtyellow}"
        # main compression method
        tar cf "${2}.tar" "${2}"
        echo ".tar compression finished!${txtwhite}"
        exit 0
fi

if [ "${1}" == "-tgz" ] ; then
    dependencycheck tar gzip
    echo "${txtblue}compressing .tgz...${txtyellow}"
    # main compression method
    tar -czf "${2}.tgz" "${2}"
    echo ".tgz compression finished!${txtwhite}"
    exit 0
fi


if [ "${1}" == "-gz" ] ; then
    dependencycheck gzip
    echo "${txtblue}compressing .gz...${txtyellow}"
    # main compression method
    gzip --keep "${2}"
    echo ".gz compression finished!${txtwhite}"
    exit 0
fi

if [ "${1}" == "-zip" ] ; then
    dependencycheck zip
    echo "${txtblue}compressing .zip...${txtyellow}"
    # main compression method
    zip "${2}.zip" "${2}"
    echo ".zip compression finished!${txtwhite}"
    exit 0
fi

if [[ "${1}" == "-bzip" || "${1}" == "-bzip2" || "${1}" == "-bz2" || "${1}" == "-bz" ]] ; then
    dependencycheck bzip2
    echo "${txtblue}compressing .bz2...${txtyellow}"
    # main compression method
    bzip2 -k "${2}"
    echo ".bz2 compression finished!${txtwhite}"
    exit 0
fi

if [[ "${1}" == "-lzip" || "${1}" == "-lz" ]] ; then
    dependencycheck lzip
    echo "${txtblue}compressing .lz...${txtyellow}"
    # main compression method
    lzip -c "${2}" > "${2}.lz"
    echo ".lz compression finished!${txtwhite}"
    exit 0
fi

if [[ "${1}" == "-rzip" || "${1}" == "-rz" ]] ; then
    dependencycheck rzip
    echo "${txtblue}compressing .rz...${txtyellow}"
    # main compression method
    rzip -k "${2}"
    echo ".rz compression finished!${txtwhite}"
    exit 0
fi

if [ "${1}" == "-xz" ] ; then
    dependencycheck xz
    echo "${txtblue}compressing .xz...${txtyellow}"
    # main compression method
    xz -k "${2}"
    echo ".xz compression finished!${txtwhite}"
    exit 0
fi

if [[ "${1}" == "-zstd" || "${1}" == "-zst" ]] ; then
    dependencycheck zstd
    echo "${txtblue}compressing .zst...${txtyellow}"
    # main compression method
    zstd -k "${2}"
    echo ".zst compression finished!${txtwhite}"
    exit 0
fi

if [[ "${1}" == "-ar" || "${1}" == "-a" ]] ; then
    dependencycheck ar
    echo "${txtblue}compressing .a...${txtyellow}"
    # main compression method
    ar -rs "${2}.a" "${2}"
    echo ".a compression finished!${txtwhite}"
    exit 0
fi

if [[ "${1}" == "-brotli" || "${1}" == "-br" ]] ; then
    dependencycheck brotli
    echo "${txtblue}compressing .br...${txtyellow}"
    # main compression method
    brotli "${2}"
    echo ".br compression finished!${txtwhite}"
    exit 0
fi

