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

workspace_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"

assert_metadata() {
  local artifact="$1"
  local channel="$2"
  local expected_suffix="$3"
  local expected_package="$4"

  ARTIFACT="$artifact"
  RELEASE_CHANNEL="$channel"
  source "$workspace_root/script/linux/package_metadata"

  [[ "$CHANNEL_SUFFIX" == "$expected_suffix" ]]
  [[ "$PACKAGE_NAME" == "$expected_package" ]]
  [[ "$GALAXY_AI_COMMAND_NAME" == "galaxy-ai$expected_suffix" ]]
  [[ "$GALAXY_CONTROL_COMMAND_NAME" == "galaxyctrl$expected_suffix" ]]
}

assert_metadata app oss -oss galaxy-oss
assert_metadata cli oss -oss galaxy-ai-oss

assert_desktop_launcher() {
  local channel="$1"
  local app_name="$2"
  local expected_launcher="$3"
  local desktop_file
  desktop_file="$workspace_root/app/channels/oss/com.galaxy.$app_name.desktop"

  [[ -f "$desktop_file" ]]
  grep -qx -- "Exec=$expected_launcher %U" "$desktop_file"
}

assert_desktop_launcher oss GalaxyOss galaxy-oss

grep -qx -- 'Package: @@PACKAGE_NAME@@' \
  "$workspace_root/resources/linux/debian/app/control.template" \
  "$workspace_root/resources/linux/debian/cli/control.template"
grep -qx -- 'Name:        @@PACKAGE_NAME@@' \
  "$workspace_root/resources/linux/rpm/app/warp.spec.template" \
  "$workspace_root/resources/linux/rpm/cli/warp.spec.template"
grep -qx -- '%{_bindir}/@@GALAXY_AI_COMMAND_NAME@@' \
  "$workspace_root/resources/linux/rpm/app/warp.spec.template"
grep -qx -- '%{_bindir}/@@GALAXY_CONTROL_COMMAND_NAME@@' \
  "$workspace_root/resources/linux/rpm/app/warp.spec.template"
grep -qx -- 'pkgname=@@PACKAGE_NAME@@' \
  "$workspace_root/resources/linux/arch/app/PKGBUILD.template" \
  "$workspace_root/resources/linux/arch/cli/PKGBUILD.template"

temp_dir="$(mktemp -d)"
trap 'rm -rf "$temp_dir"' EXIT
fake_workspace="$temp_dir/workspace"
stage_dir="$temp_dir/stage"
mkdir -p \
  "$fake_workspace/bin" \
  "$fake_workspace/script/linux" \
  "$fake_workspace/app/channels/oss" \
  "$stage_dir"
ln -s \
  "$workspace_root/script/linux/package_metadata" \
  "$fake_workspace/script/linux/package_metadata"
cat > "$fake_workspace/script/prepare_bundled_resources" <<'EOF'
#!/usr/bin/env bash
exit 0
EOF
chmod +x "$fake_workspace/script/prepare_bundled_resources"
cat > "$fake_workspace/bin/install" <<'EOF'
#!/usr/bin/env bash
paths=()
for arg in "$@"; do
  if [[ "$arg" != -* ]]; then
    paths+=("$arg")
  fi
done
mkdir -p "$(dirname "${paths[1]}")"
cp "${paths[0]}" "${paths[1]}"
EOF
chmod +x "$fake_workspace/bin/install"
cat > "$fake_workspace/app/channels/oss/com.galaxy.GalaxyOss.desktop" <<'EOF'
[Desktop Entry]
Name=GalaxyOss
Exec=galaxy-oss %U
EOF
cat > "$temp_dir/galaxy-oss" <<'EOF'
#!/usr/bin/env bash
exit 0
EOF
chmod +x "$temp_dir/galaxy-oss"

PATH="$fake_workspace/bin:$PATH" \
  WORKSPACE_ROOT_DIR="$fake_workspace" \
  RELEASE_CHANNEL=oss \
  ARTIFACT=app \
  BUNDLE_ID=com.galaxy.GalaxyOss \
  EXECUTABLE_PATH="$temp_dir/galaxy-oss" \
  BINARY_NAME=galaxy-oss \
  OPT_DIR=/opt/warpdotdev/galaxy-oss \
  CARGO_PROFILE=release \
  "$workspace_root/script/linux/bundle_install" "$stage_dir"

grep -Fq 'exec -a "$0" "/opt/warpdotdev/galaxy-oss/galaxy-oss" "$@"' \
  "$stage_dir/usr/bin/galaxy-ai-oss"
grep -Fq 'exec -a "$0" "/opt/warpdotdev/galaxy-oss/galaxy-oss" --galaxyctrl "$@"' \
  "$stage_dir/usr/bin/galaxyctrl-oss"
