#!/usr/bin/env bash
set -euo pipefail

CONFIG="${BRIGHTNESS_AUTOMATION_CONFIG:-$HOME/.config/brightness-automation/env}"
if [[ -f "$CONFIG" ]]; then
  # shellcheck disable=SC1090
  source "$CONFIG"
fi

MODEL="${BRIGHTNESS_DDCUTIL_MODEL:-HG342PCB}"
DISPLAY_NUM="${BRIGHTNESS_DDCUTIL_DISPLAY:-1}"
BUS_NUM="${BRIGHTNESS_DDCUTIL_BUS:-16}"
BACKLIGHT_PATH="${BRIGHTNESS_SYNC_BACKLIGHT:-/sys/class/backlight/intel_backlight}"
INTERVAL="${BRIGHTNESS_SYNC_INTERVAL:-1}"
MIN_PERCENT="${BRIGHTNESS_SYNC_MIN_PERCENT:-1}"

brightness_percent() {
  local current max percent

  current="$(<"${BACKLIGHT_PATH}/brightness")"
  max="$(<"${BACKLIGHT_PATH}/max_brightness")"
  percent="$(( (current * 100 + max / 2) / max ))"

  if (( percent < MIN_PERCENT )); then
    percent="$MIN_PERCENT"
  elif (( percent > 100 )); then
    percent=100
  fi

  printf '%s\n' "$percent"
}

run_ddcutil() {
  if sudo -n ddcutil --bus "$BUS_NUM" getvcp 10 >/dev/null 2>&1; then
    sudo -n ddcutil --bus "$BUS_NUM" "$@"
    return
  fi

  if sudo -n ddcutil --display "$DISPLAY_NUM" getvcp 10 >/dev/null 2>&1; then
    sudo -n ddcutil --display "$DISPLAY_NUM" "$@"
    return
  fi

  if sudo -n ddcutil --model "$MODEL" getvcp 10 >/dev/null 2>&1; then
    sudo -n ddcutil --model "$MODEL" "$@"
    return
  fi

  echo "External ${MODEL} was not reachable via sudo -n ddcutil." >&2
  return 1
}

last_percent=""

while true; do
  percent="$(brightness_percent)"

  if [[ "$percent" != "$last_percent" ]]; then
    if run_ddcutil setvcp 10 "$percent" >/dev/null; then
      last_percent="$percent"
    fi
  fi

  sleep "$INTERVAL"
done
