#!/usr/bin/env bash
set -euo pipefail

# --- Config ---
REPO_DIR="C:/xampp/htdocs/cepas"   # ruta local del repo clonado de 'cepas'
BRANCH="main"          # si no existiera, cambiá a la rama correcta o autodetecta
REMOTE_USER="root"
REMOTE_HOST="128.250.13.2"
REMOTE_PATH="/var/www/cepas"
PHP_BIN="php"                          # o /usr/bin/php si querés fijarlo

# Fuerza algoritmos legacy SOLO para 128.250.13.2
SSH_OPTS='-oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa -oKexAlgorithms=+diffie-hellman-group14-sha1 -oCiphers=+aes128-ctr,aes256-ctr -oMACs=+hmac-sha1 -oStrictHostKeyChecking=no'

# Excluir cosas que no deben subirse al server
EXCLUDES=(
  ".git"
  ".gitignore"
  ".gitlab-ci.yml"
  "main"
  "README*"
  "docs"
  # "web/uploads"      # <- descomenta si querés preservar uploads del server
)

# --- Pull local ---
cd "$REPO_DIR"
git fetch origin

# Si la rama configurada no existe en el remoto, usar la default (origin/HEAD)
if ! git ls-remote --heads origin "$BRANCH" | grep -q "refs/heads/$BRANCH"; then
  echo "⚠️  La rama remota '$BRANCH' no existe. Detectando rama por defecto..."
  DEFAULT_BRANCH="$(git symbolic-ref --short refs/remotes/origin/HEAD | sed 's@^origin/@@')"
  echo "➡️  Usando rama por defecto: $DEFAULT_BRANCH"
  BRANCH="$DEFAULT_BRANCH"
fi

git checkout -B "$BRANCH" "origin/$BRANCH"
git pull --ff-only origin "$BRANCH"

ssh $SSH_OPTS "${REMOTE_USER}@${REMOTE_HOST}" "mkdir -p ${REMOTE_PATH}"

# --- Sync (usa scp; si instalás rsync, lo preferimos) ---
EXCLUDE_FLAGS=()
for e in "${EXCLUDES[@]}"; do EXCLUDE_FLAGS+=(--exclude "$e"); done

if command -v rsync >/dev/null 2>&1; then
  echo "→ Usando rsync"
  rsync -az --delete "${EXCLUDE_FLAGS[@]}" -e "ssh $SSH_OPTS" \
    "$REPO_DIR"/ "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/"
else
  echo "→ rsync no encontrado, usando scp (no borra archivos removidos)"
  # scp no soporta --exclude; copiamos todo excepto .git ignorado arriba
  scp $SSH_OPTS -r "$REPO_DIR" ${REMOTE_USER}@${REMOTE_HOST}:/var/www/
fi

# --- Post-deploy en el server (Symfony 1) ---
ssh $SSH_OPTS "${REMOTE_USER}@${REMOTE_HOST}" bash <<EOSSH
set -euo pipefail
cd "${REMOTE_PATH}"

# Asegurar permisos de Symfony 1 (cache y log)
mkdir -p cache log
chown -R www-data:www-data cache log
chmod -R 775 cache log

# Limpiar cache (Symfony 1)
${PHP_BIN} symfony cc || ${PHP_BIN} symfony cache:clear || true

# (Opcional) publicar assets de plugins
${PHP_BIN} symfony plugin:publish-assets || true

# (Opcional) si tu proyecto usa Doctrine/Propel y hace falta regenerar modelos/clases:
# ${PHP_BIN} symfony doctrine:build --all-classes --no-confirmation || true
# ${PHP_BIN} symfony propel:build-model || true

# (Opcional) reinicio gracioso de Apache/Nginx si aplica
# systemctl reload apache2 2>/dev/null || service apache2 reload 2>/dev/null || true
# systemctl reload nginx   2>/dev/null || service nginx reload   2>/dev/null || true
EOSSH

echo "✅ Deploy OK a ${REMOTE_HOST}:${REMOTE_PATH} (branch ${BRANCH})"
