#!/usr/bin/env bash
# KeluargaMart design-family sync.
# Keeps UNIFORMITY.md + this script byte-identical across the three frontend
# repos. Canonical is keluargamart-b2b-frontend; ERP/POS copies are mirrors.
#
# Usage (from any frontend repo):
#   bash scripts/sync-design.sh        # copy canonical -> all frontends, verify
#   bash scripts/sync-design.sh check  # verify only (CI), exit 1 on drift
#
# Overrides:
#   KM_SOURCE=<path>   canonical repo (default: sibling keluargamart-b2b-frontend)
#   KM_DESTS="<dir> <dir>"  target repos (default: all sibling *-frontend repos)
set -euo pipefail

MODE="${1:-sync}"

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

CANONICAL_DIR="keluargamart-b2b-frontend"
SOURCE="${KM_SOURCE:-$(cd "$PARENT/$CANONICAL_DIR" && pwd)}"
if [ ! -f "$SOURCE/UNIFORMITY.md" ]; then
  echo "sync-design: canonical not found at $SOURCE (set KM_SOURCE)" >&2
  exit 1
fi

DESTS=()
for d in "$PARENT"/keluargamart-*-frontend; do
  [ -d "$d" ] || continue
  d="$(cd "$d" && pwd)"
  [ "$d" = "$SOURCE" ] && continue
  DESTS+=("$d")
done
if [ -n "${KM_DESTS:-}" ]; then
  DESTS=()
  for d in $KM_DESTS; do DESTS+=("$(cd "$d" && pwd)"); done
fi

FILES=("UNIFORMITY.md" "scripts/sync-design.sh")

if [ "$MODE" = "check" ]; then
  status=0
  for dest in "${DESTS[@]}"; do
    for f in "${FILES[@]}"; do
      if [ ! -f "$dest/$f" ] || ! cmp -s "$SOURCE/$f" "$dest/$f"; then
        echo "DRIFT: $dest/$f" >&2
        status=1
      fi
    done
  done
  [ "$status" -eq 0 ] && echo "sync-design: all frontends in sync"
  exit "$status"
fi

for dest in "${DESTS[@]}"; do
  for f in "${FILES[@]}"; do
    mkdir -p "$(dirname "$dest/$f")"
    cp "$SOURCE/$f" "$dest/$f"
  done
  echo "synced -> $dest"
done

for dest in "${DESTS[@]}"; do
  for f in "${FILES[@]}"; do
    cmp -s "$SOURCE/$f" "$dest/$f" || {
      echo "sync-design: verify failed for $dest/$f" >&2
      exit 1
    }
  done
done
echo "sync-design: OK — all frontends byte-identical"
