#!/usr/bin/env bash
set -e

USERS_FILE="config/users"

# --- Funciones auxiliares ---

function ensure_users_file() {
  if [ ! -f "$USERS_FILE" ]; then
    echo "⚠️  No existe $USERS_FILE. Creándolo..."
    mkdir -p config
    touch "$USERS_FILE"
  fi
}

function restart_radicale() {
  echo ""
  echo "🔄 Reiniciando contenedor Radicale..."
  docker compose restart radicale >/dev/null 2>&1 || true
  echo "✅ Radicale reiniciado correctamente."
  echo ""
}

function list_users() {
  ensure_users_file
  echo "👥 Usuarios actuales:"
  if [ -s "$USERS_FILE" ]; then
    cut -d':' -f1 "$USERS_FILE"
  else
    echo "(ninguno)"
  fi
  echo ""
}

function add_user() {
  ensure_users_file
  read -rp "Ingrese el nombre de usuario nuevo: " user
  if grep -q "^$user:" "$USERS_FILE"; then
    echo "⚠️  El usuario '$user' ya existe."
    return
  fi
  htpasswd -B "$USERS_FILE" "$user"
  restart_radicale
}

function edit_user() {
  ensure_users_file
  read -rp "Ingrese el usuario a modificar: " user
  if ! grep -q "^$user:" "$USERS_FILE"; then
    echo "⚠️  El usuario '$user' no existe."
    return
  fi
  echo "✏️  Cambiando contraseña para '$user'..."
  htpasswd -B "$USERS_FILE" "$user"
  restart_radicale
}

function delete_user() {
  ensure_users_file
  read -rp "Ingrese el usuario a eliminar: " user
  if ! grep -q "^$user:" "$USERS_FILE"; then
    echo "⚠️  El usuario '$user' no existe."
    return
  fi
  read -rp "¿Estás seguro de eliminar '$user'? (s/n): " confirm
  if [[ "$confirm" =~ ^[sS]$ ]]; then
    sed -i "/^$user:/d" "$USERS_FILE"
    restart_radicale
    echo "❌ Usuario '$user' eliminado."
  else
    echo "🚫 Operación cancelada."
  fi
  echo ""
}

# --- Menú interactivo ---
while true; do
  echo "========================================"
  echo "🔐  GESTOR DE USUARIOS RADICALE"
  echo "========================================"
  echo "1️⃣  Listar usuarios"
  echo "2️⃣  Crear nuevo usuario"
  echo "3️⃣  Editar contraseña de usuario"
  echo "4️⃣  Eliminar usuario"
  echo "5️⃣  Salir"
  echo "----------------------------------------"
  read -rp "Selecciona una opción [1-5]: " opt
  echo ""

  case "$opt" in
    1) list_users ;;
    2) add_user ;;
    3) edit_user ;;
    4) delete_user ;;
    5) echo "👋 Saliendo..."; exit 0 ;;
    *) echo "❗ Opción no válida." ;;
  esac
  echo ""
  read -rp "Presiona ENTER para continuar..." pause
  clear
done
