#!/bin/bash
# lufs-check: Measure integrated LUFS loudness (for streaming targets)
# Usage: lufs-check <audio_file> [audio_file2 ...]
#
# Targets:
#   SoundCloud: -14 LUFS (but they don't normalize up, only down)
#   Spotify: -14 LUFS
#   YouTube: -14 LUFS
#   Apple Music: -16 LUFS
#   Club/DJ: -6 to -8 LUFS (louder)

set -euo pipefail

if [[ $# -eq 0 ]]; then
    echo "Usage: lufs-check <audio_file> [audio_file2 ...]" >&2
    exit 1
fi

echo "# LUFS Loudness Analysis"
echo "# Target: -14 LUFS (SoundCloud/Spotify/YouTube)"
echo "#"
printf "%-40s %10s %10s %10s %10s\n" "FILE" "INT_LUFS" "LRA" "TRUE_PK" "STATUS"
printf "%-40s %10s %10s %10s %10s\n" "----" "--------" "---" "-------" "------"

for FILE in "$@"; do
    if [[ ! -f "$FILE" ]]; then
        echo "Warning: File not found: $FILE" >&2
        continue
    fi

    # Use ffmpeg loudnorm filter to measure LUFS
    result=$(ffmpeg -i "$FILE" -af loudnorm=print_format=json -f null - 2>&1 | tail -12)

    int_lufs=$(echo "$result" | grep "input_i" | sed 's/.*: "\([^"]*\)".*/\1/')
    lra=$(echo "$result" | grep "input_lra" | sed 's/.*: "\([^"]*\)".*/\1/')
    true_pk=$(echo "$result" | grep "input_tp" | sed 's/.*: "\([^"]*\)".*/\1/')

    # Determine status
    lufs_val=${int_lufs%.*}
    if [[ "$lufs_val" -gt -12 ]]; then
        status="TOO_HOT"
    elif [[ "$lufs_val" -lt -16 ]]; then
        status="TOO_QUIET"
    else
        status="OK"
    fi

    printf "%-40s %10s %10s %10s %10s\n" "$(basename "$FILE")" "$int_lufs" "$lra" "$true_pk" "$status"
done
