#!/usr/bin/env bash
set -euo pipefail

EMAIL="${1:?usage: migrer.sh user@domain.fr}"

CONF_DIR="${HOME}/.migrer"
DEFAULTS="${CONF_DIR}/defaults"
mkdir -p "$CONF_DIR"
chmod 700 "$CONF_DIR"

[ -f "$DEFAULTS" ] && source "$DEFAULTS"

ask() {
  local var="$1" prompt="$2" silent="${3:-}"
  local cur="${!var:-}"
  local shown="$prompt"
  [ -n "$cur" ] && [ -z "$silent" ] && shown="$prompt [$cur]"
  [ -n "$cur" ] && [ -n "$silent" ] && shown="$prompt [valeur enregistrée]"

  local val
  if [ -n "$silent" ]; then
    read -rsp "$shown: " val; echo
  else
    read -rp "$shown: " val
  fi
  [ -z "$val" ] && val="$cur"
  printf -v "$var" '%s' "$val"
}

# --- Réglages ---
echo "=== Serveur SOURCE (Fastmail) ==="
ask SRC_HOST "Hôte source"
ask SRC_PORT "Port source"
ask SRC_USER "Login source (souvent l'adresse complète)"
ask SRC_PASS "Mot de passe source (mot de passe d'application Fastmail)" silent

echo "=== Serveur DESTINATION (Google Workspace) ==="
ask DST_HOST "Hôte destination"
ask DST_PORT "Port destination"
ask DST_PASS "Mot de passe destination (mot de passe d'application Google)" silent

echo "=== Création du compte Workspace ==="
ask NEW_FIRSTNAME "Prénom du nouvel utilisateur"
ask NEW_LASTNAME "Nom du nouvel utilisateur"
ask GAM_BIN "Chemin de gam"

DST_USER="$EMAIL"

# défauts non sensibles
cat > "$DEFAULTS" <<EOF
SRC_HOST="$SRC_HOST"
SRC_PORT="$SRC_PORT"
SRC_USER="$SRC_USER"
DST_HOST="$DST_HOST"
DST_PORT="$DST_PORT"
NEW_FIRSTNAME="$NEW_FIRSTNAME"
NEW_LASTNAME="$NEW_LASTNAME"
GAM_BIN="$GAM_BIN"
EOF
chmod 600 "$DEFAULTS"

# --- 1. Création du compte ---
echo
echo ">>> Vérification / création du compte $DST_USER"
if "$GAM_BIN" info user "$DST_USER" >/dev/null 2>&1; then
  echo "Le compte existe déjà, on saute la création."
else
  echo "Création du compte..."
  "$GAM_BIN" create user "$DST_USER" \
    firstname "$NEW_FIRSTNAME" \
    lastname "$NEW_LASTNAME" \
    password "$DST_PASS" \
    changepassword off
  echo "Compte créé. Attente de la propagation (15s)..."
  sleep 15
fi

# --- 2. Migration IMAP ---
echo
echo ">>> Migration de $SRC_USER  ->  $DST_USER"
echo

imapsync \
  --host1 "$SRC_HOST" --port1 "$SRC_PORT" --ssl1 \
  --user1 "$SRC_USER" --password1 "$SRC_PASS" \
  --host2 "$DST_HOST" --port2 "$DST_PORT" --ssl2 \
  --user2 "$DST_USER" --password2 "$DST_PASS" \
  --automap \
  --skipcrossduplicates \
  --logdir "$CONF_DIR/logs" \
  --logfile "${EMAIL}_$(date +%Y%m%d_%H%M%S).log"

echo
echo ">>> Terminé."
