#!/usr/bin/env bash
# Materialize ci.slice drop-ins for the runners actually registered on this box.
set -euo pipefail

mode="${1:-apply}"
case "$mode" in
  apply|--audit) ;;
  *) echo "usage: $0 [--audit]" >&2; exit 2 ;;
esac

dropin='[Service]
Slice=ci.slice
'
changed=0
declare -a units=() changed_units=()

while IFS= read -r unit; do
  [[ "$unit" =~ ^[A-Za-z0-9_.@-]+\.service$ ]] && units+=("$unit")
done < <(systemctl --user list-unit-files --type=service --no-legend --plain | awk '{print $1}')

for runner in "$HOME"/actions-runner-*; do
  [ -d "$runner" ] || continue
  [ ! -L "$runner" ] || continue
  name="${runner##*/}"
  [[ "$name" =~ ^actions-runner-[A-Za-z0-9._-]+$ ]] || continue
  matched=0
  for unit in "${units[@]}"; do
    systemctl --user show "$unit" -p FragmentPath -p ExecStart 2>/dev/null | grep -Fq "$runner" || continue
    matched=1
    target="$HOME/.config/systemd/user/$unit.d/ci-slice.conf"
    if cmp -s <(printf '%s' "$dropin") "$target" 2>/dev/null; then
      printf 'RUNNER slice %s %s current\n' "$name" "$unit"
      continue
    fi
    if [ "$mode" = '--audit' ]; then
      printf 'RUNNER slice %s %s drifted\n' "$name" "$unit"
      changed=1
      continue
    fi
    install -d -m 0755 "$(dirname "$target")"
    printf '%s' "$dropin" >"$target"
    chmod 0644 "$target"
    printf 'RUNNER slice %s %s changed\n' "$name" "$unit"
    changed=1
    changed_units+=("$unit")
  done
  [ "$matched" -eq 1 ] || printf 'RUNNER unmanaged %s\n' "$name"
done

if [ "$mode" = '--audit' ]; then
  [ "$changed" -eq 0 ]
  exit
fi

[ "$changed" -eq 1 ] || exit 0
systemctl --user daemon-reload
for unit in "${changed_units[@]}"; do
  systemctl --user restart "$unit"
done
