#!/usr/bin/env bash
# KAR-719 — Google Production Merchant Testing #4: tägliche Slot-Überwachung.
# Prüft, dass spots_open=1 (party 2) für die 3 Google-Test-Slots erhalten bleibt
# (echter Gast könnte den freien 2er buchen → Test schlägt fehl).
# Edge-triggered: Telegram-Ping NUR bei Abweichung oder Fehler.
# Selbst-Deaktivierung nach 2026-07-10 (Test-Slots vorbei).
set -euo pipefail

if [[ "$(date +%Y%m%d)" -gt 20260710 ]]; then
  systemctl disable --now kar719-slot-watch.timer 2>/dev/null || true
  exit 0
fi

source /root/.aria-secrets/kadicon-prod-db.env
TG_TOKEN=$(grep -oP '(?<=^TELEGRAM_BOT_TOKEN=).*' /root/.claude/channels/telegram/.env 2>/dev/null || grep -oP '(?<=^TG_TOKEN=).*' /root/aria/.env)
CHAT_ID=1164395546

alert() {
  curl -sf "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
    -d chat_id="${CHAT_ID}" -d text="$1" >/dev/null || true
}

RESULT=$(psql "$KADICON_PROD_DB_URL" -tA -F'|' 2>&1 <<'SQL'
WITH win AS (
  SELECT 'Gusto' AS name, '0b4e3373-c01e-4ab2-87b7-7e705ef06f8e'::uuid AS tenant,
         '2026-07-08 17:30:00+00'::timestamptz AS ws, '2026-07-08 18:00:00+00'::timestamptz AS we
  UNION ALL SELECT 'BURGER POINT', '3ef7232f-3112-4d08-a950-7fe1901c6355',
         '2026-07-08 17:30:00+00', '2026-07-08 18:00:00+00'
  UNION ALL SELECT 'Klosterwirt', '110c840b-cf9c-4074-9d3d-484cb8172d5d',
         '2026-07-09 17:30:00+00', '2026-07-09 18:00:00+00'
)
SELECT w.name,
       count(DISTINCT t.id) - count(DISTINCT t.id) FILTER (WHERE r.id IS NOT NULL) AS spots_open_p2
FROM win w
JOIN "table" t ON t."tenantId"=w.tenant AND t."deletedAt" IS NULL AND t.capacity>=2
LEFT JOIN reservation_tables rt ON rt."tableId"=t.id
LEFT JOIN reservation r ON r.id=rt."reservationId"
  AND r."startDate" < w.we AND r."endDate" > w.ws
  AND r.state IN ('unconfirmed','approved','seated')
GROUP BY 1 ORDER BY 1;
SQL
) || { alert "⚠️ KAR-719 Slot-Watch: DB-Check fehlgeschlagen: ${RESULT:0:200}"; exit 1; }

BAD=$(echo "$RESULT" | awk -F'|' '$2 != 1 {print $1"="$2}' | paste -sd', ' -)
if [[ -n "$BAD" ]]; then
  alert "🔴 KAR-719 Slot-Watch: spots_open abgewichen (Soll 1): ${BAD} — Google-Test-Slot in Gefahr, bitte prüfen."
else
  logger -t kar719-slot-watch "OK: $(echo "$RESULT" | tr '\n' ' ')"
fi

# Google-Testbuchungen erkennen (source=google bei den 3 Test-Merchants).
# Ping bei JEDER Zunahme — das ist das Signal "Google testet aktiv".
STATE=/root/aria/state/kar719-google-bookings.count
CUR=$(psql "$KADICON_PROD_DB_URL" -tAc "SELECT count(*) FROM reservation WHERE source='google' AND \"tenantId\" IN ('0b4e3373-c01e-4ab2-87b7-7e705ef06f8e','110c840b-cf9c-4074-9d3d-484cb8172d5d','3ef7232f-3112-4d08-a950-7fe1901c6355');" 2>/dev/null) || exit 0
PREV=$(cat "$STATE" 2>/dev/null || echo "$CUR")
if [[ "$CUR" -gt "$PREV" ]]; then
  NEW=$(psql "$KADICON_PROD_DB_URL" -tA -F' ' -c "SELECT to_char(\"createdAt\",'DD.MM. HH24:MI'), left(\"tenantId\"::text,8), \"noOfPersons\", to_char(\"startDate\",'DD.MM. HH24:MI'), state FROM reservation WHERE source='google' AND \"tenantId\" IN ('0b4e3373-c01e-4ab2-87b7-7e705ef06f8e','110c840b-cf9c-4074-9d3d-484cb8172d5d','3ef7232f-3112-4d08-a950-7fe1901c6355') ORDER BY \"createdAt\" DESC LIMIT $((CUR-PREV));" 2>/dev/null)
  alert "🎉 KAR-719: $((CUR-PREV)) neue Google-Testbuchung(en) eingegangen (gesamt ${CUR}). Google testet aktiv! ${NEW}"
fi
echo "$CUR" > "$STATE"
