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

# Catalog docelowy: ten sam, w którym znajduje się skrypt
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "$BASE_DIR/../../trmnl_screens" && pwd)"

OUTPUT_DIR="$BASE_DIR"
OUTPUT_JSON="$BASE_DIR/meme_today.json"

# Opcjonalny publiczny URL (np. https://twoj-funnel.ts.net/meme)
PUBLIC_BASE_URL="${PUBLIC_BASE_URL:-}"

ARGS=(
  "--output-dir" "$OUTPUT_DIR"
  "--output-json" "$OUTPUT_JSON"
)

if [[ -n "$PUBLIC_BASE_URL" ]]; then
  ARGS+=( "--public-base-url" "$PUBLIC_BASE_URL" )
fi

echo "[meme-update] Pobieram mema…"
bash "$REPO_DIR/scripts/fetch_memy_pl.sh" "${ARGS[@]}"

LATEST="$(ls -1t "$BASE_DIR"/meme_*.jpg 2>/dev/null | head -n 1 || true)"
if [[ -z "$LATEST" ]]; then
  echo "[meme-update] Brak nowo pobranego pliku JPG." >&2
  exit 1
fi

FFMPEG_BIN="$(command -v ffmpeg || true)"

TMP_PREVIEW="$BASE_DIR/.meme_preview.tmp.jpg"
TMP_BMP="$BASE_DIR/.meme_latest.tmp.bmp"

cp "$LATEST" "$BASE_DIR/meme_source.jpg"

PREVIEW_FILTER="scale=1200:900:force_original_aspect_ratio=decrease:flags=lanczos,pad=1200:900:(ow-iw)/2:(oh-ih)/2:white"
GRAY_FILTER="scale=800:480:force_original_aspect_ratio=decrease:flags=lanczos,pad=800:480:(ow-iw)/2:(oh-ih)/2:white,format=gray"
BW_FILTER="scale=800:480:force_original_aspect_ratio=decrease:flags=lanczos,pad=800:480:(ow-iw)/2:(oh-ih)/2:white,format=gray,format=monob"

if [[ -n "$FFMPEG_BIN" ]]; then
  echo "[meme-update] Skaluję kolorowy podgląd 1200×900…"
  if "$FFMPEG_BIN" -loglevel error -y -i "$LATEST" \
      -vf "$PREVIEW_FILTER" \
      -q:v 2 "$TMP_PREVIEW"; then
    mv -f "$TMP_PREVIEW" "$BASE_DIR/meme_latest.jpg"
  else
    echo "[meme-update] ⚠️ Skalowanie kolorowe nie powiodło się, używam oryginału." >&2
    rm -f "$TMP_PREVIEW"
    cp "$LATEST" "$BASE_DIR/meme_latest.jpg"
  fi

  echo "[meme-update] Generuję obraz 8-bit 800×480 (grayscale)…"
  if "$FFMPEG_BIN" -loglevel error -y -i "$LATEST" \
      -vf "$GRAY_FILTER" \
      -pix_fmt gray "$BASE_DIR/meme_latest.png"; then
    :
  else
    echo "[meme-update] ⚠️ Konwersja grayscale nie powiodła się." >&2
    rm -f "$BASE_DIR/meme_latest.png"
  fi

  echo "[meme-update] Generuję bitmapę 1-bit 800×480 (dither)…"
  if "$FFMPEG_BIN" -loglevel error -y -i "$LATEST" \
      -vf "$BW_FILTER" \
      "$TMP_BMP"; then
    mv -f "$TMP_BMP" "$BASE_DIR/meme_latest.bmp"
  else
    echo "[meme-update] ⚠️ Konwersja do BMP nie powiodła się." >&2
    rm -f "$TMP_BMP"
  fi
else
  echo "[meme-update] ffmpeg nie znaleziono – kopiuję oryginalny plik." >&2
  cp "$LATEST" "$BASE_DIR/meme_latest.jpg"
fi

if [[ -n "$PUBLIC_BASE_URL" ]]; then
  PROC_URL="${PUBLIC_BASE_URL%/}/meme_latest.png"
  PREVIEW_URL="${PUBLIC_BASE_URL%/}/meme_latest.jpg"
  BW_URL="${PUBLIC_BASE_URL%/}/meme_latest.bmp"
else
  PROC_URL=""
  PREVIEW_URL=""
  BW_URL=""
fi

if command -v jq >/dev/null 2>&1; then
  TMP_JSON="$(mktemp)"
  jq \
    --arg processed_file "$BASE_DIR/meme_latest.png" \
    --arg processed_url "$PROC_URL" \
    --arg preview_file "$BASE_DIR/meme_latest.jpg" \
    --arg preview_url "$PREVIEW_URL" \
    --arg bw_file "$BASE_DIR/meme_latest.bmp" \
    --arg bw_url "$BW_URL" \
    '
      .results[0].image_processed_file = $processed_file
      | .results[0].image_processed_url = ( $processed_url | select(. != "") )
      | .results[0].image_preview_file = $preview_file
      | .results[0].image_preview_url = ( $preview_url | select(. != "") )
      | .results[0].image_bw_file = ( $bw_file | select(. != "") )
      | .results[0].image_bw_url = ( $bw_url | select(. != "") )
    ' "$OUTPUT_JSON" > "$TMP_JSON" && mv -f "$TMP_JSON" "$OUTPUT_JSON"
else
  echo "[meme-update] jq nie znaleziono – pomijam aktualizację JSON." >&2
fi

echo "[meme-update] Zapisano: $LATEST → meme_latest.jpg (+bmp)"

exit 0
