#!/bin/bash

###############################################################################################################
# It is recommended to test this data collection script on a few machines to ensure it meets your requirements.
# ManageEngine is not be responsible for any damage/loss to the data/setup based on the behavior of the script.
###############################################################################################################

exec 2>/dev/null

OracleJavaRemoved=false

is_paid_oracle_java() {
    version="$1"

    if [[ "$version" == 1.7* ]]; then
        [[ "$version" =~ _([0-9]+) ]] && (( ${BASH_REMATCH[1]} >= 85 )) && return 0
        return 1
    fi

    if [[ "$version" == 1.8* ]]; then
        [[ "$version" =~ _([0-9]+) ]] && (( ${BASH_REMATCH[1]} >= 211 )) && return 0
        return 1
    fi

    if [[ "$version" =~ ^(9|10)(\.|$) ]]; then return 1; fi
    if [[ "$version" =~ ^(11|12|13|14|15|16)(\.|$) ]]; then return 0; fi
    if [[ "$version" =~ ^(17|18|19|20|21)(\.|$) ]]; then return 1; fi

    return 1
}

get_vendor() {
    release_file="$1/release"
    [[ ! -f "$release_file" ]] && return
    grep -E '^ *IMPLEMENTOR *= *"' "$release_file" | head -n1 | cut -d'"' -f2
}

process_java_home() {
    java_home="$1"
    [[ ! -d "$java_home" ]] && return

    release_file="$java_home/release"
    [[ ! -f "$release_file" ]] && return

    version=$(grep '^JAVA_VERSION=' "$release_file" | cut -d'"' -f2)
    vendor=$(get_vendor "$java_home")

    [[ "$vendor" != *Oracle* ]] && return

    if is_paid_oracle_java "$version"; then
        jdk_root=$(dirname "$(dirname "$java_home")")
        if [[ -d "$jdk_root" ]]; then
            rm -rf "$jdk_root"
            OracleJavaRemoved=true
        fi
    fi
}

if [[ -x "/usr/libexec/java_home" ]]; then
    while IFS= read -r line; do
        java_home="${line##* }"
        process_java_home "$java_home"
    done < <(/usr/libexec/java_home -V 2>&1)
fi

for dir in /Library/Java/JavaVirtualMachines/*; do
    process_java_home "$dir/Contents/Home"
done

for dir in "$HOME/Library/Java/JavaVirtualMachines/"*; do
    process_java_home "$dir/Contents/Home"
done

echo "OracleJavaRemoved:${OracleJavaRemoved}"
