#!/usr/bin/env bash
set -euo pipefail

BASE_DIR=${1:-/dev/shm/voip_rec}
INCOMING_DIR="$BASE_DIR/incoming"
READY_DIR="$BASE_DIR/ready"
FAILED_DIR="$BASE_DIR/failed"
MIN_AGE_SECONDS=${MIN_AGE_SECONDS:-15}

mkdir -p "$INCOMING_DIR" "$READY_DIR" "$FAILED_DIR"
chmod 0750 "$BASE_DIR" "$INCOMING_DIR" "$READY_DIR" "$FAILED_DIR"

find "$INCOMING_DIR" -type f \( -name '*.wav' -o -name '*.mp3' \) -print0 |
while IFS= read -r -d '' source; do
  if [ ! -s "$source" ]; then
    continue
  fi
  now=$(date +%s)
  mtime=$(stat -c %Y "$source")
  if [ $((now - mtime)) -lt "$MIN_AGE_SECONDS" ]; then
    continue
  fi
  if command -v fuser >/dev/null 2>&1 && fuser -s "$source"; then
    continue
  fi
  rel=${source#"$INCOMING_DIR"/}
  part="$READY_DIR/$rel.part"
  ready="$READY_DIR/$rel.ready"
  failed="$FAILED_DIR/$rel"
  mkdir -p "$(dirname "$part")" "$(dirname "$failed")"
  chmod 0750 "$(dirname "$part")" "$(dirname "$failed")"
  if [ -e "$ready" ] || [ -e "$part" ]; then
    mv -- "$source" "$failed.$(date -u +%Y%m%dT%H%M%SZ).duplicate"
    continue
  fi
  mv -- "$source" "$part"
  chmod 0640 "$part"
  mv -- "$part" "$ready"
done
