#!/usr/bin/env bash
# Ensayo de la defensa, sobre una copia de Kallpa: el clon limpio y el cambio en vivo.
set -euo pipefail
KALLPA="${KALLPA:-../../kallpa}"
HERE="$PWD"
git() { command git -c user.name=Kallpa -c user.email=kallpa@example.com -c init.defaultBranch=main -c advice.detachedHead=false "$@"; }
resumen() { grep -E '^(ℹ (pass|fail)|.*error TS)' || true; }

rm -rf build/ensayo
mkdir -p build/ensayo
cp -r "$KALLPA" build/ensayo/origen
rm -f build/ensayo/origen/data/*.db build/ensayo/origen/data/*.db-*
cd build/ensayo/origen

# Alguien del equipo usa un archivo que está en .gitignore y nunca subió.
echo '*.local.ts' >> .gitignore
git init -q && git add -A && git commit -qm "Kallpa publicada"
cat >> src/config.ts <<'TS'

export { HOLIDAYS } from './holidays.local.ts';
TS
echo "export const HOLIDAYS = ['2026-07-28'];" > src/holidays.local.ts
git add -A && git commit -qm "Agrega los feriados" 

echo '=== En la laptop de quien lo escribió'
make --no-print-directory check 2>&1 | resumen
echo '=== git status'
git status --short | wc -l

echo '=== En un clon limpio'
cd ..
git clone -q origen clon
cd clon
(make --no-print-directory check 2>&1 || true) | resumen

echo '=== Después de subir lo que faltaba'
cd ../origen
git rm -q --cached src/holidays.local.ts 2>/dev/null || true
mv src/holidays.local.ts src/holidays.ts
sed -i "s#./holidays.local.ts#./holidays.ts#" src/config.ts
git add -A && git commit -qm "Sube los feriados"
cd .. && rm -rf clon && git clone -q origen clon && cd clon
make --no-print-directory check 2>&1 | resumen

echo '=== El cambio en vivo: un nombre de equipo tiene al menos 3 caracteres'
git switch -q -c equipo-nombre-minimo
git apply --index "$HERE/ensayo/cambio-en-vivo.diff"
git diff --cached --stat
make --no-print-directory check 2>&1 | resumen
