#!/bin/sh
# Runs deck-engine for "today": the tarot seed and the transit moment come
# from the OS clock, birth data comes from user.properties next to this
# script. Usage: ./run-engine.sh [text|html|json] [lang]
#
# [lang] overrides user.properties' lang= for this run only (e.g.
# ./run-engine.sh html de); omit it to use lang= from user.properties,
# which itself defaults to "en" if unset. See run-interpreter.sh for a
# significance report instead of the full reading.

set -eu

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BINARY="$SCRIPT_DIR/deck-engine"
PROPERTIES_FILE="$SCRIPT_DIR/user.properties"

if [ ! -x "$BINARY" ]; then
  echo "error: $BINARY not found or not executable (run 'make' in engine/ first)" >&2
  exit 1
fi

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

birth_date=""
birth_time=""
birth_utc_offset=""
birth_lat=""
birth_lon=""
lang="en"

while IFS='=' read -r key value || [ -n "$key" ]; do
  key="$(printf '%s' "$key" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
  value="$(printf '%s' "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
  case "$key" in
    '' | '#'*) continue ;;
  esac
  case "$key" in
    birth_date) birth_date="$value" ;;
    birth_time) birth_time="$value" ;;
    birth_utc_offset) birth_utc_offset="$value" ;;
    birth_lat) birth_lat="$value" ;;
    birth_lon) birth_lon="$value" ;;
    lang) [ -n "$value" ] && lang="$value" ;;
  esac
done <"$PROPERTIES_FILE"

check_set() {
  case "$2" in
    '' | *YOUR_*)
      echo "error: $PROPERTIES_FILE: '$1' is not set - edit the file and fill in your details." >&2
      exit 1
      ;;
  esac
}
check_set birth_date "$birth_date"
check_set birth_time "$birth_time"
check_set birth_utc_offset "$birth_utc_offset"
check_set birth_lat "$birth_lat"
check_set birth_lon "$birth_lon"

# OS-provided inputs: today's date is the tarot seed (stable all day, a
# new spread each day), current UTC time drives today's transits.
seed="$(date +%Y-%m-%d)"
transit_date="$(date -u +%Y-%m-%dT%H:%M)"
format="${1:-text}"
lang="${2:-$lang}"

exec "$BINARY" \
  --seed "$seed" \
  --birth-date "$birth_date" \
  --birth-time "$birth_time" \
  --birth-utc-offset "$birth_utc_offset" \
  --birth-lat "$birth_lat" \
  --birth-lon "$birth_lon" \
  --date "$transit_date" \
  --format "$format" \
  --lang "$lang" \
  --i18n-dir "$SCRIPT_DIR/i18n"
