#!/bin/bash

# Error handling
set -e

# For styling/colorizing output
txtbld=$(tput bold)
txtblue=${txtbld}$(tput setaf 4)
txtgreen=${txtbld}$(tput setaf 2)
txtred=${txtbld}$(tput setaf 1)
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}xtract: a simple shell script for decompressing common file formats"

# Reset output style
tput bold & tput setaf 7

# Simply copy and paste, changing extension string and extraction method below
if [ "${1}" == "-tar" ] ; then
    dependencycheck tar
    echo "${txtblue}decompressing .tar...${txtyellow}"
    # main extraction method
    tar xf "${2}"
    echo ".tar decompression finished!${txtwhite}"
    exit 0
fi

if [ "${1}" == "-tgz" ] ; then
    dependencycheck tar gunzip
    echo "${txtblue}decompressing .tgz...${txtyellow}"
    # main extraction method
    tar zxf "${2}"
    echo ".tgz decompression finished!${txtwhite}"
    exit 0
fi

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

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

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

if [[ "${1}" == "-lzip" || "${1}" == "-lz" ]] ; then
    dependencycheck lzip
    echo "${txtblue}decompressing .lz...${txtyellow}"
    # main extraction method
    lzip -d "${2}"
    echo ".lz decompression finished!${txtwhite}"
    exit 0
fi

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

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

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

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

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