#!/bin/bash -p
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

set -e
readonly defaultPath="/etc/brltty.conf"

readonly programPrefix="brltty-"
programName="${0##*/}"
[ "${programName#${programPrefix}}" = "${programName}" ] && programName="${programPrefix}${programName}"
readonly programName

programMessage() {
  local message="${1}"
  local level="${2}"

  logger -p "daemon.${level:-info}" -t "${programName}" -- "${1}" &&
  [ ! -t 2 ] ||
  echo >&2 "${programName}: ${message}"
}

errorMessage() {
  local message="${1}"
  local code="${2}"

  programMessage "${message}" err
  exit "${code:-1}"
}

syntaxError() {
  local message="${1}"

  errorMessage "${message}" 2
}

semanticError() {
  local message="${1}"

  errorMessage "${message}" 3
}

instancePath="${BRLTTY_SYSTEMD_INSTANCE:-${defaultPath}}"
[ "${instancePath#/}" = "${instancePath}" ] && instancePath="/${instancePath}"
readonly instancePath

if [ "${instancePath#/sys/}" != "${instancePath}" ]
then
  isDeviceInstance=true
  udevOption="path"
elif [ -c "${instancePath}" ]
then
  isDeviceInstance=true
  udevOption="name"
elif [ -f "${instancePath}" ]
then
  isDeviceInstance=false
elif [ -e "${instancePath}" ]
then
  semanticError "unsupported instance path: ${instancePath}"
else
  semanticError "instance path not found: ${instancePath}"
fi

if "${isDeviceInstance}"
then
  isUdevManaged=false

  while read line
  do
    if [[ "${line}" =~ ^'N: ' ]]
    then
      isUdevManaged=true
    elif [[ "${line}" =~ ^'E: '([^ =]+)=(.*) ]]
    then
      name="${BASH_REMATCH[1]}"
      value="${BASH_REMATCH[2]}"

      [[ "${name}" =~ ^'BRLTTY_' ]] || continue
      [ -z "${!name}" ] || continue

      export "${name}=${value}"
    fi
  done < <((udevadm info --"${udevOption}"="${instancePath}" --export 2>/dev/null))

  "${isUdevManaged}" || semanticError "instance path not managed by udev: ${instancePath}"
else
  export BRLTTY_CONFIGURATION_FILE="${instancePath}"
fi

set -- "${BRLTTY_EXECUTABLE_PATH:-brltty}" -E ${BRLTTY_EXECUTABLE_ARGUMENTS} "${@}"
programMessage "executing command: ${*}" info
exec "${@}"
exit "${?}"
