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

id="${1:-}"
if [[ ! "$id" =~ ^[a-z][a-z0-9._-]*$ ]]; then
  echo "extension id must match ^[a-z][a-z0-9._-]*$" >&2
  exit 2
fi
root="$(cd "$(dirname "$0")/.." && pwd)"
dest="$root/extensions/$id"
if [[ -e "$dest" ]]; then
  echo "extension already exists: $id" >&2
  exit 1
fi
mkdir -p "$dest"
cat > "$dest/manifest.json" <<JSON
{
  "schema": "ele.extension.manifest/v1",
  "id": "$id",
  "name": "$id",
  "version": "0.1.0",
  "description": "A trusted ELE Extension.",
  "main": "main.js",
  "views": [{"id":"main","title":"Extension view"}]
}
JSON
cat > "$dest/main.js" <<'JS'
export default (app) => {
  app.commands.register({
    id: `${app.extensionId}.hello`,
    name: "Say hello",
    callback: () => app.notifications.show("Hello from this Extension")
  });
  app.views.register("main", {
    title: "Extension view",
    mount(container) {
      const text = document.createElement("p");
      text.textContent = `Extension ${app.extensionId} is running in ELE.`;
      container.append(text);
      return () => container.replaceChildren();
    }
  });
};
JS
echo "created $dest"
