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

WHISPER_DIR="${WHISPER_DIR:-/tmp/whisper.cpp}"
WHISPER_BIN="${WHISPER_BIN:-$WHISPER_DIR/build/bin/whisper-cli}"
MODEL_NAME="${WHISPER_MODEL_NAME:-tiny.en}"
MODEL_PATH="${WHISPER_MODEL_PATH:-$WHISPER_DIR/models/ggml-${MODEL_NAME}.bin}"
THREADS="${WHISPER_THREADS:-2}"
LANGUAGE="${WHISPER_LANGUAGE:-en}"
OUTPUT_FORMAT="txt"
OUTPUT_PATH=""

usage() {
  cat <<EOF
Usage: $(basename "$0") /path/to/audio.wav [--out /path/to/output.txt] [--model tiny.en] [--language en] [--threads 2]

Notes:
- This script expects whisper.cpp to already be built.
- For now, input should be a whisper.cpp-compatible local audio file, ideally WAV.
- Default model path: $WHISPER_DIR/models/ggml-<model>.bin
EOF
}

if [[ $# -lt 1 ]]; then
  usage
  exit 1
fi

INPUT=""
while [[ $# -gt 0 ]]; do
  case "$1" in
    --out)
      OUTPUT_PATH="$2"
      shift 2
      ;;
    --model)
      MODEL_NAME="$2"
      MODEL_PATH="$WHISPER_DIR/models/ggml-${MODEL_NAME}.bin"
      shift 2
      ;;
    --model-path)
      MODEL_PATH="$2"
      shift 2
      ;;
    --language)
      LANGUAGE="$2"
      shift 2
      ;;
    --threads)
      THREADS="$2"
      shift 2
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      if [[ -z "$INPUT" ]]; then
        INPUT="$1"
        shift
      else
        echo "Unexpected argument: $1" >&2
        usage
        exit 1
      fi
      ;;
  esac
done

if [[ -z "$INPUT" ]]; then
  echo "Missing input audio file." >&2
  exit 1
fi

if [[ ! -f "$INPUT" ]]; then
  echo "Input file not found: $INPUT" >&2
  exit 1
fi

if [[ ! -x "$WHISPER_BIN" ]]; then
  echo "whisper-cli not found or not executable at: $WHISPER_BIN" >&2
  exit 1
fi

if [[ ! -f "$MODEL_PATH" ]]; then
  echo "Whisper model not found at: $MODEL_PATH" >&2
  exit 1
fi

if [[ -z "$OUTPUT_PATH" ]]; then
  OUTPUT_PATH="${INPUT%.*}.txt"
fi

OUT_BASE="${OUTPUT_PATH%.txt}"

"$WHISPER_BIN" \
  -m "$MODEL_PATH" \
  -f "$INPUT" \
  -l "$LANGUAGE" \
  -t "$THREADS" \
  -o${OUTPUT_FORMAT} \
  -of "$OUT_BASE"

echo "$OUTPUT_PATH"
