#!/usr/bin/env bash
# Creates a disposable local repository. No remote, upload, or package install.
# Requirements: Bash, Git 2.28+, Node.js with ES module support.
set -euo pipefail

lab_root=$(mktemp -d "${TMPDIR:-/tmp}/agentastic-stack-lab.XXXXXX")
git init -q -b main "$lab_root/repo"
git -C "$lab_root/repo" config user.name "Stack Lab"
git -C "$lab_root/repo" config user.email "stack-lab@example.invalid"
printf '%s\n' '# Reporting stack lab' > "$lab_root/repo/README.md"
git -C "$lab_root/repo" add README.md
git -C "$lab_root/repo" -c core.hooksPath=/dev/null commit -qm "Create lab baseline"

git -C "$lab_root/repo" worktree add -qb report-model "$lab_root/model" main
mkdir "$lab_root/model/src"
cat > "$lab_root/model/src/report-total.mjs" <<'JS'
export function totalCents(rows) {
  return rows.reduce((total, row) => total + row.amountCents, 0);
}
JS
git -C "$lab_root/model" add src/report-total.mjs
git -C "$lab_root/model" -c core.hooksPath=/dev/null commit -qm "Add report total"

git -C "$lab_root/repo" worktree add -qb report-api "$lab_root/api" report-model
cat > "$lab_root/api/src/report-response.mjs" <<'JS'
import { totalCents } from './report-total.mjs';

export function reportResponse(rows) {
  return { totalCents: totalCents(rows), currency: 'USD' };
}
JS
git -C "$lab_root/api" add src/report-response.mjs
git -C "$lab_root/api" -c core.hooksPath=/dev/null commit -qm "Add report response"

git -C "$lab_root/repo" worktree add -qb report-ui "$lab_root/ui" report-api
cat > "$lab_root/ui/src/report-view.mjs" <<'JS'
export function reportView(report) {
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: report.currency,
  }).format(report.totalCents / 100);
}
JS
cat > "$lab_root/ui/check.mjs" <<'JS'
import assert from 'node:assert/strict';
import { totalCents } from './src/report-total.mjs';
import { reportResponse } from './src/report-response.mjs';
import { reportView } from './src/report-view.mjs';

assert.equal(totalCents([]), 0);
assert.equal(totalCents([{ amountCents: 1250 }, { amountCents: 50 }]), 1300);
assert.deepEqual(reportResponse([]), { totalCents: 0, currency: 'USD' });
assert.equal(reportView(reportResponse([{ amountCents: 1250 }])), '$12.50');
console.log('PASS: four illustrative reporting assertions');
JS
git -C "$lab_root/ui" add src/report-view.mjs check.mjs
git -C "$lab_root/ui" -c core.hooksPath=/dev/null commit -qm "Add report presentation and integration checks"

git -C "$lab_root/repo" merge-base --is-ancestor main report-model
git -C "$lab_root/repo" merge-base --is-ancestor report-model report-api
git -C "$lab_root/repo" merge-base --is-ancestor report-api report-ui
node "$lab_root/ui/check.mjs"
printf 'Lab directory: %s\n' "$lab_root"
printf 'Main checkout: %s/repo\n' "$lab_root"
printf 'Inspect with: git -C "%s/repo" log --all --graph --oneline\n' "$lab_root"
