#!/bin/bash
# Uruchamiany z .cpanel.yml (cwd = korzeń repozytorium na serwerze).
# Gdy ścieżka klonu Git = DEPLOYPATH, NIE kasujemy .next/standalone — są to te same pliki co po pull.
# Gdy klon jest w innym katalogu, kopiujemy build do katalogu aplikacji Node.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
TARGET="${DEPLOYPATH:-}"

if [[ -z "$TARGET" ]]; then
  echo "cpanel-deploy: brak DEPLOYPATH — ustaw zmienną w .cpanel.yml (export DEPLOYPATH=...)." >&2
  exit 1
fi

# Jedna ścieżka kanoniczna do porównania (bez końcowego slash)
REPO_CANON="$(cd "$REPO_ROOT" && pwd -P)"
TARGET_CANON="$(cd "$TARGET" && pwd -P)"

# API zapisuje pliki do ${APP_ROOT}/public/uploads/listings (patrz lib/listing-images-upload.ts).
# Next standalone serwuje /uploads z .next/standalone/public/uploads — musi to być symlink do tego samego katalogu.
ensure_listing_uploads_symlink() {
  local root="$1"
  local standalone_public="${root}/.next/standalone/public"
  local uploads_root="${root}/public/uploads"

  if [[ ! -d "${root}/.next/standalone" ]]; then
    echo "cpanel-deploy: pomijam symlink uploads — brak ${root}/.next/standalone"
    return 0
  fi
  if [[ ! -d "$standalone_public" ]]; then
    echo "cpanel-deploy: pomijam symlink uploads — brak ${standalone_public} (niepełny build?)" >&2
    return 0
  fi

  mkdir -p "${uploads_root}/listings"

  if [[ -e "${standalone_public}/uploads" ]] || [[ -L "${standalone_public}/uploads" ]]; then
    rm -rf "${standalone_public}/uploads"
  fi

  local rel=""
  if rel="$(realpath --relative-to="$standalone_public" "$uploads_root" 2>/dev/null)"; then
    :
  elif command -v python3 >/dev/null 2>&1; then
    rel="$(python3 -c "import os; print(os.path.relpath(os.path.abspath('$uploads_root'), os.path.abspath('$standalone_public')))")"
  else
    rel="../../../public/uploads"
  fi

  ln -s "$rel" "${standalone_public}/uploads"
  echo "cpanel-deploy: ${standalone_public}/uploads → ${uploads_root} (względna: ${rel})"
}

if [[ "$REPO_CANON" == "$TARGET_CANON" ]]; then
  echo "cpanel-deploy: katalog repozytorium = DEPLOYPATH — pomijam kopiowanie (artefakty są już na miejscu po git pull)."
  ensure_listing_uploads_symlink "$TARGET_CANON"
  exit 0
fi

mkdir -p "${TARGET_CANON}/.next"
rm -rf "${TARGET_CANON}/.next/standalone"
cp -R "${REPO_CANON}/.next/standalone" "${TARGET_CANON}/.next/"
cp -f "${REPO_CANON}/app.js" "${TARGET_CANON}/"
echo "cpanel-deploy: skopiowano .next/standalone i app.js do ${TARGET_CANON}"

ensure_listing_uploads_symlink "$TARGET_CANON"
