#!/bin/bash

if [ $# -lt 1 ]; then
    echo "Usage:"
    echo -e "\t$(basename $0) moodle-zip-file [moodle-zip-file2] ... [out_dir]\n"
    echo "This program will extract and reorganize moodle zip files structures."
    echo "Files will be extracted in a separate folder of out_dir"
    echo "default value for out_dir is /tmp"
    exit 0
fi


function process {

    # Unzip given file to temprary working directory
    WORK_FOLDER="$2"/$(basename -s .zip "$1")
    mkdir -vp "$WORK_FOLDER"
    unzip -O Windows "$1" -d "${WORK_FOLDER}"

    # Move onlinetext to the same folder as the contribution
    # Delete onlinetext source folder (i.e. keep only one folder per student)
    find "${WORK_FOLDER}" -type d -name "*onlinetext_" | while  read d
    do
        d_dest=$(basename "${d}" | cut -d '_' -f 1-3)  # get common folder name
        echo $d_dest
        d_dest="${WORK_FOLDER}/${d_dest}_file_"  # build destination folder from common name
        mv -vi "${d}/texteenligne.html" "$d_dest"
        rmdir "${d}"
    done

    # Unzip all found compressed files (i.e. code)
    find "${WORK_FOLDER}" -type f -regex ".*\.\(tar.gz\|tgz\|tar\|tar.xz\|bz2\|rar\|zip\|\)" | while read f
    do
        echo " ========= Attempt to extract ${f} ========="
        dest=$(dirname "${f}")
        case "${f}" in
            *.tar.gz|*.tgz)    tar -xvzf "${f}" -C "${dest}" && rm -v "${f}" ;;
            *.tar|*.tar.xz)    tar -xvf "${f}" -C "${dest}" && rm -v "${f}"  ;;
            *.bz2)    echo "Format bunzip not implemented yet" ;;
            *.rar)    echo "Format RAR not implemented yet" ;;
            *.zip)    unzip "${f}" -d "${dest}" && rm -v "${f}" ;;
            *)        echo "'${f}' cannot be extracted" ;;
        esac
    done


    read -p " (!!! NOT working yet) Do you want to delete all ELF files in the extracted folders ? (yes/no) " yn
    case ${yn} in
        yes|y)      $(find "${WORK_FOLDER}" -type f -print0 | grep ELF | cut -d':' -f1)  ;;
        *)          echo "Skipping ELF suppression..."  ;;
    esac
}

# Get last argument, if does not exist -> folder to be created
last=${@:$#}
if [ ! -e "${last}" ]; then
    mkdir -pv "${last}"
fi

# If last argument is a folder -> this is out_dir otherwise use default out_dir
if [ -d "${last}" ]; then
    OUT_DIR="$last"
    FILES=${@:1:$#-1}
else
    OUT_DIR="/tmp"
    FILES=${@}
fi

for f in ${FILES}; do
    process "${f}" "${OUT_DIR}"
done