#!/bin/bash

# omarchy:summary=Toggle nightlight screen temperature
# omarchy:args=[--status]
# omarchy:examples=omarchy toggle nightlight

ON_TEMP=4000
OFF_TEMP=6500
IDENTITY_TEMP=6000

current_temp() {
  local output

  output=$(hyprctl hyprsunset temperature 2>/dev/null) || return
  grep -oE '[0-9]+' <<<"$output" | head -n1
}

status_json() {
  local temp enabled

  temp=$(current_temp)
  if [[ -n $temp ]] && (( temp < IDENTITY_TEMP )); then
    enabled=true
  else
    enabled=false
  fi

  jq -cn --argjson enabled "$enabled" --arg temp "$temp" \
    '{enabled:$enabled, temperature:(($temp | tonumber?) // null)}'
}

if [[ ${1:-} == "--status" ]]; then
  status_json
  exit 0
fi

# Ensure hyprsunset is running
if ! pgrep -x hyprsunset >/dev/null; then
  setsid uwsm-app -- hyprsunset &
fi

# Query the current temperature
CURRENT_TEMP=$(current_temp)

if [[ -z $CURRENT_TEMP || $CURRENT_TEMP == $OFF_TEMP ]]; then
  TARGET_TEMP=$ON_TEMP
else
  TARGET_TEMP=$OFF_TEMP
fi

# A freshly-started hyprsunset applies its default temperature at the end of
# its boot, overriding anything set before then — so resend until it sticks
for _ in {1..10}; do
  hyprctl hyprsunset temperature $TARGET_TEMP >/dev/null 2>&1
  sleep 0.2
  [[ $(current_temp) == "$TARGET_TEMP" ]] && break
done

omarchy-shell -q nightlight refresh
