#!/usr/bin/env bash

function usage {
    cat <<-END >&2
    USAGE: $0
        -k OS_SERVICE_PATH          # OpenSearch installation path (required)
        -j OS_SERVICE_JAVA_HOME     # OpenSearch java home (required)
        -i OS_SERVICE_PID_FOLDER    # OpenSearch pid folder (default to /var/run/opensearch)
        -n OS_SERVICE_NAME          # OpenSearch service name (default opensearch)
        -u OS_SERVICE_USER          # OpenSearch service user (defaut bpc)
        -g OS_SERVICE_GROUP         # OpenSearch service group (default bpc)
        -e OS_ENV                   # OpenSearch environment variable (can be repeated)
        -h                          # this usage message
END
    exit
}

OS_ENV=()

while getopts k:j:i:p:n:e:u:g:h opt
do
    case $opt in
    k)  export OS_SERVICE_PATH="$OPTARG" ;;
    j)  export OS_SERVICE_JAVA_HOME="$OPTARG" ;;
    i)  export OS_SERVICE_PID_FOLDER="$OPTARG" ;;
    n)  export OS_SERVICE_NAME="$OPTARG" ;;
    u)  export OS_SERVICE_USER="$OPTARG" ;;
    g)  export OS_SERVICE_GROUP="$OPTARG" ;;
    e)  OS_ENV+=("$OPTARG") ;;
    h|?) usage ;;
    esac
done

shift $(( $OPTIND - 1 ))

if [[ ! $OS_SERVICE_PATH ]]; then
    echo "Warning, OS_SERVICE_PATH is required"
    usage
fi

if [[ ! $OS_SERVICE_JAVA_HOME ]]; then
    echo "Warning, OS_SERVICE_JAVA_HOME is required"
    usage
fi

if [[ ! $OS_SERVICE_DIR_NAME ]]; then
    export OS_SERVICE_DIR_NAME=`basename "${OS_SERVICE_PATH}"`
fi

if [[ ! $OS_SERVICE_CONF ]]; then
    export OS_SERVICE_CONF="${OS_SERVICE_PATH}/config"
fi

if [[ ! $OS_SERVICE_NAME ]]; then
    export OS_SERVICE_NAME="opensearch"
fi

if [[ ! $OS_SERVICE_PID_FOLDER ]]; then
    export OS_SERVICE_PID_FOLDER="/var/run/opensearch"
fi

if [[ ! $OS_SERVICE_PID_FILE ]]; then
    export OS_SERVICE_PID_FILE="${OS_SERVICE_PID_FOLDER}/${OS_SERVICE_NAME}.pid"
fi

if [[ ! $OS_SERVICE_USER ]]; then
    export OS_SERVICE_USER="bpc"
fi

if [[ ! $OS_SERVICE_GROUP ]]; then
    export OS_SERVICE_GROUP="bpc"
fi

if [[ ! $OS_SERVICE_EXECUTABLE ]]; then
    export OS_SERVICE_EXECUTABLE="opensearch"
fi

systemd_result_file="${OS_SERVICE_NAME}.service"

echo "Writing service file: ${systemd_result_file}"
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < "${PWD}/opensearch-systemd.template" > "${PWD}/${systemd_result_file}"
