#!/usr/bin/env bash
set -e

# Get absolute path of this script's directory
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT_DIR="$SCRIPT_DIR/.."

# Load config
source "$ROOT_DIR/scripts/config.sh"

git push origin main

# SSH to target: pull, build, sync apps, restart
ssh "$SSH_HOST" bash <<'SCRIPT'
set -e

DEST="${DEST:-$HOME/toes}"
APPS_DIR="${APPS_DIR:-$HOME/apps}"
DATA_DIR="${DATA_DIR:-$HOME/data}"
REPOS_DIR="$DATA_DIR/repos"

cd "$DEST" && git checkout -- bun.lock && git pull origin main && bun install && rm -rf dist && bun run build

echo "=> Syncing default apps..."
for app_dir in "$DEST"/apps/*/; do
  app=$(basename "$app_dir")
  [ -f "$app_dir/package.json" ] || continue
  target="$APPS_DIR/$app"
  mkdir -p "$target"
  cp -a "$app_dir"/. "$target"/
  echo "  $app"
  (cd "$target" && bun install --frozen-lockfile 2>/dev/null || bun install)
done

echo "=> Initializing bare repos..."
mkdir -p "$REPOS_DIR"
for app_dir in "$DEST"/apps/*/; do
  app=$(basename "$app_dir")
  [ -f "$app_dir/package.json" ] || continue
  bare="$REPOS_DIR/$app.git"

  if [ ! -d "$bare" ]; then
    git init --bare -b main "$bare" > /dev/null
    git -C "$bare" config http.receivepack true
  fi

  tmp=$(mktemp -d)
  cp -a "$app_dir"/. "$tmp"/
  git -C "$tmp" init -b main > /dev/null 2>&1
  git -C "$tmp" add -A > /dev/null
  git -C "$tmp" -c user.name=toes -c user.email=toes@localhost commit -m "deploy" > /dev/null 2>&1
  git -C "$tmp" push --force "$bare" main > /dev/null 2>&1
  rm -rf "$tmp"
  echo "  $app"
done

sudo systemctl restart toes.service
SCRIPT

echo "=> Deployed to $SSH_HOST"
echo "=> Visit $URL"
