#!/usr/bin/env bash
# rebuild-osrm.sh — пересборка OSRM-графа эндуро-профиля.
#
# Запускает полный цикл extract → partition → customize и рестартит роутер.
# Требует docker, osrm-backend образ и pbf-файл в каталоге OSRM_DIR.
#
# Использование:
#   ./scripts/rebuild-osrm.sh
#   OSRM_DIR=/path/to/osrm OSRM_PBF=area.osm.pbf ./scripts/rebuild-osrm.sh
#
# Переменные окружения (со значениями по умолчанию):
#   OSRM_DIR         — каталог с enduro.lua и .osm.pbf (default: /home/slin/enduro-trails/osrm)
#   OSRM_PBF         — имя pbf-файла (default: enduro.osm.pbf)
#   OSRM_PROFILE     — имя lua-профиля (default: enduro.lua)
#   OSRM_IMAGE       — docker-образ osrm-backend (default: ghcr.io/project-osrm/osrm-backend:latest)
#   OSRM_CONTAINER   — имя контейнера для рестарта (default: osrm-osrm-routed-1)

set -euo pipefail

OSRM_DIR="${OSRM_DIR:-/home/slin/enduro-trails/osrm}"
OSRM_PBF="${OSRM_PBF:-enduro.osm.pbf}"
OSRM_PROFILE="${OSRM_PROFILE:-enduro.lua}"
OSRM_IMAGE="${OSRM_IMAGE:-ghcr.io/project-osrm/osrm-backend:latest}"
OSRM_CONTAINER="${OSRM_CONTAINER:-osrm-osrm-routed-1}"

if [[ ! -d "$OSRM_DIR" ]]; then
  echo "ERROR: каталог $OSRM_DIR не существует" >&2
  exit 1
fi

if [[ ! -f "$OSRM_DIR/$OSRM_PBF" ]]; then
  echo "ERROR: pbf-файл $OSRM_DIR/$OSRM_PBF не найден" >&2
  exit 1
fi

if [[ ! -f "$OSRM_DIR/$OSRM_PROFILE" ]]; then
  echo "ERROR: lua-профиль $OSRM_DIR/$OSRM_PROFILE не найден" >&2
  exit 1
fi

OSRM_BASE="${OSRM_PBF%.osm.pbf}"
OSRM_FILE="$OSRM_BASE.osrm"

echo "==> Пересборка OSRM-графа"
echo "    каталог:  $OSRM_DIR"
echo "    pbf:      $OSRM_PBF"
echo "    профиль:  $OSRM_PROFILE"
echo "    образ:    $OSRM_IMAGE"
echo "    контейнер: $OSRM_CONTAINER"

run_osrm() {
  docker run --rm -v "$OSRM_DIR:/data" "$OSRM_IMAGE" "$@"
}

echo "==> [1/4] osrm-extract (это ~40 минут)"
run_osrm osrm-extract -p "/data/$OSRM_PROFILE" "/data/$OSRM_PBF"

echo "==> [2/4] osrm-partition"
run_osrm osrm-partition "/data/$OSRM_FILE"

echo "==> [3/4] osrm-customize"
run_osrm osrm-customize "/data/$OSRM_FILE"

echo "==> [4/4] Рестарт контейнера $OSRM_CONTAINER"
if docker ps -a --format '{{.Names}}' | grep -qx "$OSRM_CONTAINER"; then
  docker restart "$OSRM_CONTAINER"
  echo "    контейнер перезапущен"
else
  echo "    WARNING: контейнер $OSRM_CONTAINER не найден — рестарт пропущен" >&2
fi

echo "==> Готово"
