#!/usr/bin/env bash
# Regenerate the TypeScript client from the API's OpenAPI schema (design D12).
#
# Exporting the schema from the app rather than scraping a running server means CI can
# check freshness without booting the stack.
set -euo pipefail

cd "$(dirname "$0")/.."

SCHEMA_PATH="web/lib/api/openapi.json"
TYPES_PATH="web/lib/api/schema.d.ts"

mkdir -p web/lib/api

echo "Exporting OpenAPI schema..."
docker compose -f docker-compose.yml -f docker-compose.dev.yml --env-file .env.dev \
	run --rm --no-deps api python -m scripts.export_openapi > "$SCHEMA_PATH"

echo "Generating TypeScript types..."
docker compose -f docker-compose.yml -f docker-compose.dev.yml --env-file .env.dev \
	run --rm --no-deps -T web npx openapi-typescript "/app/../$SCHEMA_PATH" -o "/app/../$TYPES_PATH" \
	2>/dev/null || npx --yes openapi-typescript "$SCHEMA_PATH" -o "$TYPES_PATH"

echo "Wrote $SCHEMA_PATH and $TYPES_PATH"
