#!/usr/bin/env bash
#@ignore-def
set -euo pipefail
IFS=$'\n\t'

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
self=$(basename "$0") # "$SCRIPT_DIR/$self" => this file
repo=$(dirname $(readlink -f "$SCRIPT_DIR/$self"))

# META-BASH TEMPLATE
#   made from ${replaceMap}

mapName="llm-tagger"
# dbg: /home/looper/untiloop-armed/repo/untiloop/.map-show/tmp.llm-tagger.mdg.svg
fnImage="../../../tmp.llm-tagger.mdg.svg"
zoom="11"
scale="2048"
relSize="0.5"
baseSize="1024"
numTiles="2048"
viewBoxTile="0.5"
url="$1"
z="$2"
x="$3"
y="$4"
mode="${5:-none}"

# fnCssSource: /home/looper/dev/databox-libs/graph/map-show/map-show-zoom-theme.css
fnCss="$repo/zoom.css"
useCss=0 # experimental

x_padded=$(printf "%03d" "$x")
y_padded=$(printf "%03d" "$y")

outputWebp="$repo/${x_padded}/${y_padded}.webp"
export outputWebp

dirOut="$repo/${x_padded}"
export dirOut
outputSvg="${dirOut}/${y_padded}.svg"
export outputSvg

if [ ! -f "${outputWebp}" ]; then
  #  echo mkdir -p "$(dirname ${outputWebp})"
  mkdir -p "$(dirname ${outputWebp})"

  echo make-svg-tile "$@"

  # TODO make-svg

  #  def create_tile_svg(original_root, x_offset, y_offset, viewBoxTile, output_tile_size):
  #      svg = ET.Element("svg", {
  #          "xmlns": "http://www.w3.org/2000/svg",
  #          "width": str(output_tile_size),
  #          "height": str(output_tile_size),
  #          "viewBox": f"{x_offset} {y_offset} {viewBoxTile} {viewBoxTile}",
  #          # "overflow": "hidden"  # Clip everything outside the viewBox
  #      })
  #
  #      for child in original_root:
  #          svg.append(child)
  #
  #      return ET.ElementTree(svg)

  # Define your values
  minX="$(echo "$relSize*$x" | bc)"
  minY="$(echo "$relSize*$y" | bc)"
  viewBox="$minX $minY $viewBoxTile $viewBoxTile" # TODO mohol som to vypocitat v jq

  echo "viewBox: $viewBox"

  # TODO this is the slow part
  # TODO gojq sa neda pouzit kvoly problem s number precission vo viewBox (fix-svg-template.jq)
  # fnFixSvgProgram="/home/looper/dev/databox-libs/graph/map-show/fix-svg-template.jq"
  #  echo cat "$fnImage"
  cat "$repo/$fnImage" |
    jq -sRr -f "$repo/fix-svg.jq" \
      --arg viewBox "$viewBox" \
      --argjson viewBoxTile "$viewBoxTile" \
      --argjson baseSize "$baseSize" \
      --argjson relSize "$relSize" \
      --argjson x "$x" --argjson y "$y" \
      --argjson zoom "$zoom" \
      >"$outputSvg"

  #      >"${outputWebp}.svg"
  #  echo --stylesheet "$fnCss"

  if [ -f "$fnCss" ] && [ "$useCss" != 0 ]; then
    echo "stylesheet used: $fnCss"
    rsvg-convert -u --no-keep-image-data --zoom 2 -f png -w "$baseSize" -h "$baseSize" -o "${outputWebp}.png" --stylesheet "$fnCss" "$outputSvg"
  else
    rsvg-convert -u --no-keep-image-data --zoom 2 -f png -w "$baseSize" -h "$baseSize" -o "${outputWebp}.png" "$outputSvg"

    # TODO for SVG with embedded png we must use inkscape. no other SVG->PNG software was able to do it
    #      inkscape "$outputSvg" --export-type=png \
    #        --export-filename="${outputWebp}.png" \
    #        --export-width="$baseSize" \
    #        --export-height="$baseSize" 2>/dev/null
  fi

  #  cp "$outputWebp.png" "$outputWebp"
  #  towebp -q 90 "$outputWebp.png"
  towebp -l "$outputWebp.png"
  mv "$outputWebp.webp" "$outputWebp"
  #  time magick "$outputWebp.png" -quality 90 "$outputWebp"

  # cleanup?
  if [ "$mode" == "svg" ]; then
    # TODO log
    echo "mode: svg"

    # TODO keep svg
    # TODO run inspect features
    # ──────────────────────────
  else
    rm "$outputSvg" 2>/dev/null || true
  fi

  rm "${outputWebp}.png" 2>/dev/null || true
fi
