#!/usr/bin/env bash
# ═══════════════════════════════════════════════════════════════════════════
# notifications-demo.sh — Demo del sistema de notificaciones de alloy
# Para el Episodio #834 — atareao con Linux
# ═══════════════════════════════════════════════════════════════════════════
# Muestra cómo funcionan las notificaciones: Telegram, Matrix, Webhook
# ═══════════════════════════════════════════════════════════════════════════

set -e

VERDE='\033[0;32m'
AMARILLO='\033[1;33m'
AZUL='\033[0;34m'
GRIS='\033[0;90m'
NC='\033[0m'

echo -e "${AZUL}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${AZUL}║  🔔 alloy — Sistema de notificaciones                       ║${NC}"
echo -e "${AZUL}║  Canales: Telegram, Matrix, Webhook                         ║${NC}"
echo -e "${AZUL}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""

# ── 1. State worker: detección de cambios ───────────────────────────────
echo -e "${VERDE}═══ 1. Detección de cambios de estado ═══${NC}"
echo ""
echo -e "${GRIS}El state_worker (workers/state.rs) ejecuta:${NC}"
echo ""
echo "  loop {"
echo "    let stream = docker.events(Some(options));"
echo "    let mut fallback = tokio::time::interval(Duration::from_secs(30));"
echo "    loop {"
echo "      tokio::select! {"
echo "        event = stream.next() => { /* procesar evento Docker */ }"
echo "        _ = fallback.tick() => { refresh(...).await; }"
echo "      }"
echo "    }"
echo "  }"
echo ""
echo -e "${GRIS}Eventos Docker monitorizados:${NC}"
echo "  start, stop, die, kill, pause, unpause, restart, create, destroy"
echo ""

# ── 2. Transiciones detectadas ──────────────────────────────────────────
echo -e "${VERDE}═══ 2. Transiciones de estado ═══${NC}"
echo ""
echo "  running  →  exited   →  ⏹️ detenido"
echo "  running  →  paused   →  ⏸️ pausado"
echo "  running  →  dead     →  💀 finalizado"
echo "  exited   →  running  →  ▶️ en ejecución"
echo "  *        →  restart  →  🔄 reiniciando"
echo ""

# ── 3. Canales de notificación ──────────────────────────────────────────
echo -e "${VERDE}═══ 3. Canales de notificación ═══${NC}"
echo ""

echo -e "${AMARILLO}Telegram:${NC}"
echo "  POST https://api.telegram.org/bot{token}/sendMessage"
echo "  Body: { \"chat_id\": \"...\", \"text\": \"🚨 alloy: nginx cambió a ⏹️ detenido\" }"
echo "  Config: TELEGRAM_TOKEN + TELEGRAM_CHAT_ID"
echo ""

echo -e "${AMARILLO}Matrix:${NC}"
echo "  PUT /_matrix/client/r0/rooms/{room}/send/m.room.message/{txn_id}"
echo "  Body: { \"msgtype\": \"m.text\", \"body\": \"🚨 alloy: nginx cambió a ⏹️ detenido\" }"
echo "  Config: MATRIX_TOKEN + MATRIX_HOMESERVER + MATRIX_ROOM"
echo ""

echo -e "${AMARILLO}Webhook:${NC}"
echo "  POST {url} con JSON:"
echo '  {'
echo '    "event": "state_change",'
echo '    "container": "nginx",'
echo '    "status": "running → exited",'
echo '    "timestamp": "2026-08-29T12:00:00Z",'
echo '    "source": "alloy"'
echo '  }'
echo "  Config: WEBHOOK_URL"
echo ""

# ── 4. Código de notify_all ─────────────────────────────────────────────
echo -e "${VERDE}═══ 4. Lógica de notificación (notifications.rs) ═══${NC}"
echo ""
echo -e "${GRIS}Cuando se detecta un cambio:${NC}"
echo ""
echo "  1. Verificar si el contenedor tiene notify_events=true en su política"
echo "  2. Si sí:"
echo "     a. Enviar evento SSE a /api/notifications"
echo "     b. Llamar a notify_all() que itera sobre los canales configurados:"
echo "        - Si TELEGRAM_TOKEN configurado → enviar mensaje"
echo "        - Si MATRIX_TOKEN configurado → enviar mensaje"
echo "        - Si WEBHOOK_URL configurado → POST JSON"
echo ""

# ── 5. Configuración desde la UI ────────────────────────────────────────
echo -e "${VERDE}═══ 5. Configuración desde Settings ═══${NC}"
echo ""
echo "  Desde la pestaña Settings puedes configurar:"
echo ""
echo "  Notificaciones:"
echo "    - Telegram: token + chat_id"
echo "    - Matrix: homeserver + token + room"
echo "    - Webhook: URL"
echo ""
echo "  Políticas de actualización:"
echo "    - Acción por defecto (none/pull/pull-restart/pull-restart-stack)"
echo "    - Cleanup old image (bool)"
echo "    - Rollback on failure (bool)"
echo "    - Notify events (bool)"
echo ""
echo "  Auto-update:"
echo "    - Enabled (bool)"
echo "    - Cron expression"
echo "    - Notify on update (bool)"
echo "    - Pull timeout (segundos)"
echo ""

# ── 6. Comandos para probar ─────────────────────────────────────────────
echo -e "${VERDE}═══ 6. Probar notificaciones ═══${NC}"
echo ""
echo "  # Ver settings actuales"
echo "  curl http://localhost:3066/api/admin/settings \\"
echo "    -H \"Cookie: session=TU_TOKEN\""
echo ""
echo "  # Configurar Telegram (via PUT)"
echo "  curl -X PUT http://localhost:3066/api/admin/settings \\"
echo "    -H \"Cookie: session=TU_TOKEN\" \\"
echo "    -H \"Content-Type: application/json\" \\"
echo '    -d '"'"'{"telegram_token":"...","telegram_chat_id":"..."}'"'"'"
echo ""
echo "  # Ver SSE de notificaciones en tiempo real"
echo "  curl -N http://localhost:3066/api/notifications \\"
echo "    -H \"Cookie: session=TU_TOKEN\""
echo ""