#!/usr/bin/env bash
##makedesc: Install Sublime Text

set -eo pipefail

installed() { command -v "$1" >/dev/null 2>&1; }

download() {
    if installed wget; then
        wget -q --show-progress "$1" -O "$2"
    else
        curl -fsSL "$1" -o "$2"
    fi
}

install() {
    if [ "$(uname -s)" = "Darwin" ]; then
        if installed brew; then
            brew install --cask sublime-text
        else
            echo "ERROR: Install Homebrew first." >&2
            exit 1
        fi
        return
    fi

    echo
    echo "==============================================="
    echo "Installing Sublime Text"
    echo "==============================================="
    echo

    # https://www.sublimetext.com/download

    STVER='4200'

    mkdir -p "$HOME/install"
    DEB_PATH="$HOME/install/sublime-text_build-${STVER}_amd64.deb"
    BIN_PATH="/opt/sublime_text/sublime_text"

    if [[ ! -f "$DEB_PATH" ]]; then
        download "https://download.sublimetext.com/sublime-text_build-${STVER}_amd64.deb" "$DEB_PATH"
    fi

    sudo dpkg -i "$DEB_PATH"
    sudo cp -f "$BIN_PATH" "$BIN_PATH.old"

    if [[ $STVER = 4169 ]]; then
        echo "00489f39: c640 0501 4885 c9" | sudo xxd -r - "$BIN_PATH"
    elif [[ $STVER = 4200 ]]; then
        sudo sed -i 's#\x0F\xB6\x51\x05\x83\xF2\x01#\xC6\x41\x05\x01\xB2\x00\x90#' "$BIN_PATH"
    else
        sudo sed -i 's#\x80\x79\x05\x00\x0F\x94\xC2#\xC6\x41\x05\x01\xB2\x00\x90#' "$BIN_PATH"
    fi

    echo
    echo "Finish!"
    $BIN_PATH --version
    echo
}

remove() {
    if [ "$(uname -s)" = "Darwin" ]; then
        if installed brew; then
            brew uninstall --cask sublime-text
        fi
        return
    fi

    echo
    echo "==============================================="
    echo "Removing Sublime Text"
    echo "==============================================="
    echo

    sudo dpkg -r sublime-text 2>/dev/null || true
    sudo rm -rf /opt/sublime_text

    echo
    echo "Finish!"
    echo
}

case "$1" in
    r|remove|d|delete|p|purge) remove ;;
    *) install ;;
esac
