#!/bin/bash

MODULENAME=$(basename $PWD)

check_workspace() {
    if [[ ! -d "node_modules" ]]; then
        while true; do
            read -p "[!!] The Angular workspace has not been prepared. Would you like to do it now? [Y\n] " yn
            case $yn in
                [Yy]* ) prepare_workspace; break;;
                [Nn]* ) exit 1;;
                * ) prepare_workspace; break;;
            esac
        done
    fi
}

prepare_workspace() {
    echo "[*] Preparing the Angular workspace."

    if ! command -v npm &> /dev/null; then
        echo "[!] NPM does not appear to be installed on this system. Failed to create workspace."
        return
    fi

    if ! npm install &> /dev/null; then
        echo "[!] Failed to prepare workspace. Run npm install to see why."
        return
    fi

    echo "[*] Prepared the Angular workspace successfully."
}

build_module() {
    ng build --prod > /dev/null 2>&1
    RET=$?

    if [[ $RET -ne 0 ]]; then
        echo "[!] Angular Build Failed: Run 'ng build --prod' to figure out why."
        exit 1
    else
        echo "[*] Angular Build Succeeded"
    fi

    # Step 2: Copy the required files to the build output
    cp -r projects/$MODULENAME/src/module.svg dist/$MODULENAME/bundles/
    cp -r projects/$MODULENAME/src/module.json dist/$MODULENAME/bundles/
    cp -r projects/$MODULENAME/src/module.py dist/$MODULENAME/bundles/ > /dev/null 2>&1
    cp -r projects/$MODULENAME/src/module.php dist/$MODULENAME/bundles/ > /dev/null 2>&1
    cp -r projects/$MODULENAME/src/assets/ dist/$MODULENAME/bundles/ > /dev/null 2>&1

    # Step 3: Clean up
    rm -rf dist/$MODULENAME/bundles/*.map
    rm -rf dist/$MODULENAME/bundles/*.min*
    rm -rf bundletmp
    mv dist/$MODULENAME/bundles/ bundletmp
    rm -rf dist/$MODULENAME/*
    mv bundletmp/* dist/$MODULENAME/
    rm -rf bundletmp
}

package() {
    VERS=$(cat dist/$MODULENAME/module.json | grep "version" | awk '{split($0, a, ": "); gsub("\"", "", a[2]); gsub(",", "", a[2]); print a[2]}')
    rm -rf $MODULENAME-$VERS.tar.gz
    echo "[*] Packaging $MODULENAME (Version $VERS)"
    cd dist/
    tar -pczf $MODULENAME-$VERS.tar.gz $MODULENAME
    mv $MODULENAME-$VERS.tar.gz ../
    cd ../
}

copy_to_device() {
    echo "[*] Copying module to WiFi Pineapple via SCP"
    scp -r dist/$MODULENAME root@172.16.42.1:/pineapple/modules
}

main() {
    check_workspace
    build_module

    if [[ $1 == "package" ]]; then
        package
    elif [[ $1 == "copy" ]]; then
        copy_to_device
    fi

    echo "[*] Success!"
}

main $1