#!/usr/bin/env bash
# Edits the title and description of an mp3 file

set -euo pipefail
die() { echo "Error: $*" >&2; exit 1; }
command -v ffmpeg  >/dev/null 2>&1 || die "ffmpeg not found"
command -v ffprobe >/dev/null 2>&1 || die "ffprobe not found"

[[ $# -eq 1 ]] || die "Usage: $(basename "$0") <media-file>"

file="$1"
[[ -f "$file" ]] || die "file not found: $file"

editor="${EDITOR:-nano}"
title_tmp=$(mktemp)
desc_tmp=$(mktemp)

trap 'rm -f "$title_tmp" "$desc_tmp"' EXIT

ffprobe -v error \
    -show_entries format_tags=title \
    -of default=noprint_wrappers=1:nokey=1 \
    "$file" >"$title_tmp" || true

ffprobe -v error \
    -show_entries format_tags=description \
    -of default=noprint_wrappers=1:nokey=1 \
    "$file" >"$desc_tmp" || true

echo "Editing title..."
"$editor" "$title_tmp"

echo "Editing description..."
"$editor" "$desc_tmp"

title=$(<"$title_tmp")
description=$(<"$desc_tmp")
tmp="${file%.*}.tmp.${file##*.}"

ffmpeg \
    -y \
    -v error \
    -nostats \
    -i "$file" \
    -map 0 \
    -c copy \
    -metadata "title=$title" \
    -metadata "description=$description" \
    "$tmp"

mv "$tmp" "$file"
echo "Updated metadata: $file"
