#!/bin/bash

# Please don't delete. This script is linked to, as a redirect, from fleetctl and the Fleet website.

set -eo pipefail


brew_wine(){
    # Wine reference: https://wiki.winehq.org/MacOS
    # Wine can be installed without brew via a distribution such as https://github.com/Gcenx/macOS_Wine_builds/releases/tag/10.0 or by building from source.
    # To install a version tied to a specific commit SHA we must create a local tap and install from it after wine 4.6.4 dropped support, see
    # https://github.com/Homebrew/brew/pull/20414
    TAP_PATH="$(brew --repository)/Library/Taps/fleet/homebrew-local/Casks"
    mkdir -p "${TAP_PATH}"
    echo "# tap auto-generated by Fleet for installing wine-stable" > "$(dirname "${TAP_PATH}")/README.md"
    curl -O https://raw.githubusercontent.com/Homebrew/homebrew-cask/bad613d274f9a646dace4a4cc7f2512f836be5b4/Casks/w/wine-stable.rb
    mv wine-stable.rb "${TAP_PATH}/"
    brew install --cask --no-quarantine fleet/local/wine-stable; exit 0
}


warn_wine(){
printf "\nWARNING: The Wine app developer has an Apple Developer certificate but the\napp bundle post-installation will not be code-signed or notarized.\n\nDo you wish to proceed?\n\n"
while true
do
    read -r -p "install> " install
    case "$install" in
        y|yes|Y|YES) brew_wine ;;
          n|no|N|NO) printf "\nExiting...\n\n"; exit 1 ;;
                  *) printf "\nPlease enter yes or no at the prompt...\n\n" ;;
    esac
done
}


# option to execute script in non-interactive mode
while getopts 'n' option
do
    case "$option" in
        n) mode=auto ;;
        *) : ;;
    esac
done


# prevent root execution
if [ "$EUID" = 0 ]
then
    printf "\nTo prevent unnecessary privilege elevation do not execute this script as the root user.\nExiting...\n\n"; exit 1
fi


# check if Homebrew is installed
if ! command -v brew > /dev/null 2>&1
then
    printf "\nHomebrew is not installed.\nPlease install Homebrew.\nFor instructions, see https://brew.sh/\n\n"; exit 1
fi


# install Wine
if [ "$mode" = 'auto' ]
then
    printf "\n%s executed in non-interactive mode.\n\n" "$0"; brew_wine
else
    warn_wine
fi
