#!/bin/sh

check_os_version() {
  local product_version vmaj vmin vpat codename

  product_version="$(/usr/bin/sw_vers -productVersion)"  
  IFS='.' read -r vmaj vmin vpat <<<"${product_version}.0.0"
  vmin=${vmin:-0}; vpat=${vpat:-0}

  codename="(unknown)"
  case "${vmaj}.${vmin}" in
    10.1[1-4])	 codename="dd4" ;;
    10.15)     	 codename="dd5" ;;
    1[1-5].*|2[6-7].*) codename="dd6plus" ;;
    *)        	 codename="(unknown)" ;;
  esac
  
  printf 'Detected: macOS %s %s\n' "$product_version" >&2
  printf '%s\n' "$codename"  
}

run_dd() {
  local os_ver=${1:-"(unknown)"}
  local LaunchPath="/Volumes/DiskDrill/Disk Drill.app/Contents/MacOS/Disk Drill"
  local URL=""
  local LocalDMG=""
  local RamDisk="/Volumes/DDDownload"
  local CURL_OPTS=""
  
  case "$os_ver" in
    dd4)
		URL="http://dl.cleverfiles.com/boot/diskdrill_4.dmg"
		CURL_OPTS="-L --http1.1 --tlsv1.2"
		LocalDMG="/Volumes/DDDownload/diskdrill_4.dmg"
		echo "Selected: Disk Drill 4"
    ;;
     dd5)
		URL="https://dl.cleverfiles.com/boot/diskdrill_5.dmg"
		CURL_OPTS="-L"
		LocalDMG="/Volumes/DDDownload/diskdrill_5.dmg"
		echo "Selected: Disk Drill 5"
    ;;
     dd6plus)
		URL="https://dl.cleverfiles.com/boot/diskdrill_6.dmg"
		CURL_OPTS="-L"
		LocalDMG="/Volumes/DDDownload/diskdrill_6.dmg"
		echo "Selected: Disk Drill 6"
    ;;
	 *)
		echo "Unsupported macOS detected" >&2
		return 1
    ;;    
  esac  
  
  if [ ! -e "$RamDisk" ]; then
    echo "Creating RAM disk..."
    diskutil erasevolume HFS+ 'DDDownload' `hdiutil attach -nomount ram://196608` >/dev/null 2>&1
  fi

  if [ ! -e "$LocalDMG" ]; then
    echo "Downloading DiskDrill..."
    if curl $CURL_OPTS \
			--retry 5 --connect-timeout 30 --retry-delay 2 --fail \
			-o "$LocalDMG" \
			"$URL"
	then
        echo "Download successful"
    else
        echo "Download failed"
        rm -f "$LocalDMG"
    fi
  fi

  if [ -e "$LocalDMG" ]; then
  if [ ! -e "$LaunchPath" ]; then
    echo "Attaching DiskDrill.dmg..."
    hdiutil attach $LocalDMG -nobrowse
  fi
  fi

  if [ -e "$LaunchPath" ]; then
    "$LaunchPath"
  fi
}

main() {
  local codename
  codename="$(check_os_version)"
  run_dd "$codename"
}

main "$@"