#!/bin/bash

# Script de déploiement optimisé de Cleo vers l'environnement de développement
# Version: 2.0 - Utilise tar.gz pour un transfert plus rapide

cd /home/pierre/dev/cleo

# Configuration du serveur hôte Debian 12
HOST_SSH_HOST=195.154.80.116                  # Adresse IP du serveur hôte
HOST_SSH_USER=root                             # Utilisateur SSH sur le serveur hôte
HOST_SSH_PORT=22                               # Port SSH du serveur hôte
HOST_SSH_KEY=/home/pierre/.ssh/id_rsa_mbpi    # Clé SSH privée pour accéder au serveur hôte

# Configuration du conteneur Incus hébergeant cette application
CT_PROJECT_NAME=default                        # Nom du projet Incus où se trouve le conteneur
CT_NAME=dva-front                              # Nom du conteneur Incus
CT_IP=13.23.33.42                              # IP interne du conteneur Incus
DEPLOY_DIR=/var/www                            # Répertoire de déploiement sur le conteneur
APP_NAME=cleo                                  # Nom de l'application

# Propriétaire et groupe pour les fichiers et dossiers de destination
OWNER=nginx
GROUP=nginx

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Définir les options SSH
SSH_OPTS="-p $HOST_SSH_PORT"
if [ ! -z "$HOST_SSH_KEY" ]; then
  SSH_OPTS="$SSH_OPTS -i $HOST_SSH_KEY"
fi

# Afficher les paramètres
echo -e "${GREEN}=== Déploiement optimisé CLEO ===${NC}"
echo "Serveur hôte: $HOST_SSH_USER@$HOST_SSH_HOST:$HOST_SSH_PORT"
echo "Conteneur: $CT_NAME"
echo "Déploiement: $DEPLOY_DIR/$APP_NAME"
echo "=================================="

# 1. Créer l'archive tar.gz localement
echo -e "${YELLOW}1. Création de l'archive...${NC}"
tar -czf /tmp/cleo.tar.gz \
  --exclude='.git' \
  --exclude='log/*.log' \
  --exclude='pub/files/upload/*' \
  --exclude='docs/*.sql' \
  --exclude='vendor' \
  --exclude='backup_*' \
  --exclude='*.tar.gz' \
  --exclude='.env.swp' \
  .

if [ $? -ne 0 ]; then
  echo -e "${RED}Erreur lors de la création de l'archive${NC}"
  exit 1
fi

ARCHIVE_SIZE=$(du -h /tmp/cleo.tar.gz | cut -f1)
echo -e "${GREEN}✓ Archive créée: /tmp/cleo.tar.gz ($ARCHIVE_SIZE)${NC}"

# 2. Copier l'archive vers IN3
echo -e "${YELLOW}2. Transfert de l'archive vers IN3...${NC}"
scp -P $HOST_SSH_PORT -i $HOST_SSH_KEY /tmp/cleo.tar.gz $HOST_SSH_USER@$HOST_SSH_HOST:/tmp/

if [ $? -ne 0 ]; then
  echo -e "${RED}Erreur lors du transfert de l'archive${NC}"
  rm -f /tmp/cleo.tar.gz
  exit 1
fi
echo -e "${GREEN}✓ Archive transférée sur IN3${NC}"

# 3. Nettoyer l'ancien répertoire /tmp/cleo sur IN3 s'il existe
echo -e "${YELLOW}3. Nettoyage des anciens fichiers temporaires sur IN3...${NC}"
ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST "rm -rf /tmp/cleo 2>/dev/null || true"
echo -e "${GREEN}✓ Nettoyage effectué${NC}"

# 4. Transférer et extraire dans le conteneur
echo -e "${YELLOW}4. Déploiement dans le conteneur $CT_NAME...${NC}"

# Script à exécuter sur IN3
REMOTE_SCRIPT="
set -e

# Sélectionner le projet Incus
incus project switch $CT_PROJECT_NAME

# Transférer l'archive dans le conteneur
echo 'Transfert de l archive dans le conteneur...'
incus file push /tmp/cleo.tar.gz $CT_NAME/tmp/

# Créer le répertoire de destination et extraire
echo 'Extraction de l archive...'
incus exec $CT_NAME -- sh -c '
  mkdir -p $DEPLOY_DIR/$APP_NAME && \
  cd $DEPLOY_DIR/$APP_NAME && \
  tar -xzf /tmp/cleo.tar.gz && \
  rm -f /tmp/cleo.tar.gz
'

# Configurer les permissions
echo 'Configuration des permissions...'
incus exec $CT_NAME -- sh -c '
  chown -R $OWNER:$GROUP $DEPLOY_DIR/$APP_NAME && \
  find $DEPLOY_DIR/$APP_NAME -type d -exec chmod 755 {} \; && \
  find $DEPLOY_DIR/$APP_NAME -type f -exec chmod 644 {} \; && \
  mkdir -p $DEPLOY_DIR/$APP_NAME/log && \
  chmod 777 $DEPLOY_DIR/$APP_NAME/log && \
  touch $DEPLOY_DIR/$APP_NAME/log/$(date +%m%d).log && \
  chmod 777 $DEPLOY_DIR/$APP_NAME/log/$(date +%m%d).log && \
  chown nobody:nobody $DEPLOY_DIR/$APP_NAME/log/*.log && \
  chmod 644 $DEPLOY_DIR/$APP_NAME/.env && \
  rm -f $DEPLOY_DIR/$APP_NAME/.env.swp && \
  if [ -d $DEPLOY_DIR/$APP_NAME/pub/files/upload ]; then 
    chmod 775 $DEPLOY_DIR/$APP_NAME/pub/files/upload && \
    chown $OWNER:$GROUP $DEPLOY_DIR/$APP_NAME/pub/files/upload
  fi
'

# Nettoyer l'archive sur IN3
rm -f /tmp/cleo.tar.gz

echo 'Déploiement terminé avec succès!'
"

# Exécuter le script sur IN3
ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST "$REMOTE_SCRIPT"

if [ $? -ne 0 ]; then
  echo -e "${RED}Erreur lors du déploiement${NC}"
  # Nettoyer l'archive locale et distante
  rm -f /tmp/cleo.tar.gz
  ssh $SSH_OPTS $HOST_SSH_USER@$HOST_SSH_HOST "rm -f /tmp/cleo.tar.gz 2>/dev/null || true"
  exit 1
fi

# 5. Nettoyer l'archive locale
echo -e "${YELLOW}5. Nettoyage local...${NC}"
rm -f /tmp/cleo.tar.gz
echo -e "${GREEN}✓ Archive locale supprimée${NC}"

echo ""
echo -e "${GREEN}===================================================${NC}"
echo -e "${GREEN}   Déploiement terminé avec succès !              ${NC}"
echo -e "${GREEN}===================================================${NC}"
echo "Site: http://dcleo.unikoffice.com"
echo "Chemin: $DEPLOY_DIR/$APP_NAME sur $CT_NAME"
echo ""