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

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
package_center_dir="$(cd "${script_dir}/.." && pwd)"
controller_dir="$(cd "${package_center_dir}/.." && pwd)"
source_repo="${SOURCE_FOODSAFE_REPO:-/Users/sunqianqian/Desktop/work/food_safety}"
runtime_root="${FOODSAFE_RELEASE_RUNTIME_ROOT:-${HOME}/Library/Application Support/FoodsafeReleaseCenter}"
runtime_repo="${runtime_root}/food_safety"
runtime_controller="${runtime_root}/foodSafetyDeploy"

[[ -d "${source_repo}/.git" ]] || { printf 'food_safety repository not found: %s\n' "${source_repo}" >&2; exit 1; }
command -v rsync >/dev/null 2>&1 || { printf 'rsync is required\n' >&2; exit 1; }

mkdir -p "${runtime_root}"
if [[ ! -d "${runtime_repo}/.git" ]]; then
  git clone --no-hardlinks "${source_repo}" "${runtime_repo}"
fi

source_origin="$(git -C "${source_repo}" remote get-url origin)"
git -C "${runtime_repo}" remote set-url origin "${source_origin}"
git -C "${runtime_repo}" fetch origin '+refs/heads/*:refs/remotes/origin/*' --prune

rsync -a \
  --exclude='.git/' \
  --exclude='node_modules/' \
  --exclude='deploy/offline/release/' \
  --exclude='.DS_Store' \
  "${source_repo}/" "${runtime_repo}/"
rsync -a "${source_repo}/node_modules/" "${runtime_repo}/node_modules/"

mkdir -p "${runtime_controller}/packageCenter/data"
rsync -a --exclude='packageCenter/data/' --exclude='.DS_Store' \
  "${controller_dir}/" "${runtime_controller}/"

printf 'runtime synchronized: %s\n' "${runtime_root}"
