#!/bin/bash

set -euo pipefail

DOWNLOAD_URI=https://github.com/alcatraz/Alcatraz/releases/download/1.2.1/Alcatraz.tar.gz
PLUGINS_DIR="${HOME}/Library/Application Support/Developer/Shared/Xcode/Plug-ins"
XCODE_VERSION="$(xcrun xcodebuild -version | head -n1 | awk '{ print $2 }')"
PLIST_PLUGINS_KEY="DVTPlugInManagerNonApplePlugIns-Xcode-${XCODE_VERSION}"
BUNDLE_ID="com.mneorr.Alcatraz"
TMP_FILE="$(mktemp -t ${BUNDLE_ID})"

# Remove Alcatraz from Xcode's skipped plugins list if needed
if defaults read com.apple.dt.Xcode "$PLIST_PLUGINS_KEY" &> "$TMP_FILE"; then
    # We read the prefs successfully, delete Alcatraz from the skipped list if needed
    /usr/libexec/PlistBuddy -c "delete skipped:$BUNDLE_ID" "$TMP_FILE" > /dev/null 2>&1 && {
        pgrep Xcode > /dev/null && {
            echo 'An instance of Xcode is currently running.' \
                 'Please close Xcode before installing Alcatraz.'
            exit 1
        }
        defaults write com.apple.dt.Xcode "$PLIST_PLUGINS_KEY" "$(cat "$TMP_FILE")"
        echo 'Alcatraz was removed from Xcode'\''s skipped plugins list.' \
             'Next time you start Xcode select "Load Bundle" when prompted.'
    }
else
    # Could not read the prefs. Filter known warnings, and exit for any other.
    KNOWN_WARNING="The domain/default pair of \(.+, $PLIST_PLUGINS_KEY\) does not exist"

    # tr: For some mysterious reason, some `defaults` errors are outputed on two lines.
    # grep: -v returns 1 when output is empty (ie. we filtered the known warning)
    # so we exit on 0, which means an unknown error occured.
    tr -d '\n' < "$TMP_FILE" | egrep -v "$KNOWN_WARNING" && exit 1
fi
rm -f "$TMP_FILE"

# Download and install Alcatraz
mkdir -p "${PLUGINS_DIR}"
curl -L $DOWNLOAD_URI | tar xvz -C "${PLUGINS_DIR}"

beer='🍻'
# the 1 is not a typo!
omg_one_meme='!!1!' # the 1 is not a typo
# the 1 is not a typo!
# http://knowyourmeme.com/memes/the-1-phenomenon
echo "Alcatraz successfully installed$omg_one_meme$beer " \
     "Please restart your Xcode ($XCODE_VERSION)."