#!/usr/bin/env bash

set -euo pipefail

STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/wf-recorder"
PID_FILE="$STATE_DIR/pid"
META_FILE="$STATE_DIR/meta"
OUTPUT_DIR="$HOME/Videos/Recordings"
PREFERRED_OUTPUTS=("HDMI-A-1" "eDP-1")

AUDIO_MODE="${1:-}"

mkdir -p "$STATE_DIR" "$OUTPUT_DIR"

if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
    kill -INT "$(cat "$PID_FILE")"
    rm -f "$PID_FILE" "$META_FILE"
    pkill -RTMIN+9 someblocks
    exit 0
fi

rm -f "$PID_FILE" "$META_FILE"

randr_out=$(wlr-randr)

get_enabled() {
    echo "$randr_out" | awk -v name="$1" '
        $0 ~ "^"name" " { found=1; next }
        found && /^[A-Za-z0-9_-]+ / { found=0 }
        found && /Enabled:/ { print $2; exit }
    '
}

TARGET=""
for name in "${PREFERRED_OUTPUTS[@]}"; do
    if [[ "$(get_enabled "$name")" == "yes" ]]; then
        TARGET="$name"
        break
    fi
done

if [[ -z "$TARGET" ]]; then
    TARGET=$(echo "$randr_out" | awk '/^[A-Za-z0-9_-]+ /{print $1; exit}')
fi

if [[ -z "$TARGET" ]]; then
    notify-send "Recording failed" "No output found" 2>/dev/null || true
    exit 1
fi

get_refresh_rate() {
    local name="$1"
    echo "$randr_out" | awk -v name="$name" '
        $0 ~ "^"name" " { found=1; next }
        found && /^[A-Za-z0-9_-]+ / { found=0 }
        found && /current/ {
            match($0, /@([0-9]+\.[0-9]+) Hz/, arr)
            if (arr[1] != "") print arr[1]
            exit
        }
    '
}

raw_hz=$(get_refresh_rate "$TARGET")
FPS=$([[ -n "$raw_hz" ]] && printf "%.0f" "$raw_hz" || echo 60)

AUDIO_ARGS=()
AUDIO_LABEL="no audio"

if [[ -n "$AUDIO_MODE" ]]; then
    case "$AUDIO_MODE" in
        mic)
            AUDIO_ARGS=(-a)
            AUDIO_LABEL="mic"
            ;;
        desktop)
            AUDIO_ARGS=("--audio=@DEFAULT_MONITOR@")
            AUDIO_LABEL="desktop"
            ;;
        *)
            AUDIO_ARGS=("--audio=${AUDIO_MODE}")
            AUDIO_LABEL="$AUDIO_MODE"
            ;;
    esac
fi

timestamp=$(date +"%m-%d-%Y-%H-%M-%S")
filepath="${OUTPUT_DIR}/Recording_${timestamp}.mp4"

wf-recorder -o "$TARGET" -r "$FPS" "${AUDIO_ARGS[@]}" -f "$filepath" &
pid=$!

echo "$pid" > "$PID_FILE"
{
    echo "output=$TARGET"
    echo "file=$filepath"
    echo "start=$(date +%s)"
    echo "fps=$FPS"
    echo "audio=$AUDIO_LABEL"
} > "$META_FILE"

disown "$pid"
pkill -RTMIN+3 someblocks
