#!/bin/bash

# ==============================================================================
#   SCRIPT VERBOSO PARA MERGE DE GIT EN UN DIRECTORIO ESPECÍFICO
# ==============================================================================
#
#   Este script realiza las siguientes operaciones:
#   1. Cambia al directorio 'doncella-web-page'.
#   2. Se asegura de que el directorio de trabajo (dentro de doncella-web-page) esté limpio.
#   3. Cambia (checkout) a la rama 'staging'.
#   4. Fusiona (merge) los cambios desde 'joels-branch' hacia 'staging'.
#   5. Vuelve (checkout) a la rama 'joels-branch'.
#
#   Uso:
#   1. Guarda este contenido en un archivo, por ejemplo, 'merge_doncella_script.sh',
#      en el directorio PADRE de 'doncella-web-page'.
#   2. Dale permisos de ejecución: chmod +x merge_doncella_script.sh
#   3. Ejecútalo desde el directorio PADRE: ./merge_doncella_script.sh
#
# ==============================================================================

# --- Configuración ---
TARGET_DIR="doncella-web-page"
BRANCH_STAGING="staging"
BRANCH_ORIGEN="joels-branch"

echo "----------------------------------------------------------------------"
echo "  INICIO DEL SCRIPT DE MERGE: $BRANCH_ORIGEN -> $BRANCH_STAGING"
echo "  Directorio de trabajo objetivo: $TARGET_DIR"
echo "----------------------------------------------------------------------"
echo
echo "INFO: El script se ejecutará desde el directorio actual: $(pwd)"
echo

# --- Paso 0: Cambiar al Directorio de Trabajo ---
echo ">>> PASO 0: Intentando cambiar al directorio '$TARGET_DIR'..."
cd "$TARGET_DIR"

# Verificar si el cambio de directorio fue exitoso
if [ $? -ne 0 ]; then
  echo "[ERROR] ¡Falló el cambio al directorio '$TARGET_DIR'!"
  echo "        Asegúrate de que el directorio exista en la ubicación actual y tengas permisos para acceder."
  echo "        Ubicación actual: $(pwd)"
  echo
  echo "SCRIPT ABORTADO."
  exit 1 # Salir con código de error
else
  echo "    ÉXITO: Se cambió correctamente al directorio '$TARGET_DIR'."
  echo "    INFO: El directorio de trabajo actual ahora es: $(pwd)"
fi
echo

# --- Paso 1: Verificación Preliminar: Estado del Repositorio ---
echo ">>> PASO 1: Verificando si hay cambios sin confirmar en '$TARGET_DIR'..."
# Ejecuta 'git status --porcelain'. Si devuelve alguna salida, hay cambios.
if [[ -n $(git status --porcelain) ]]; then
  echo "[ERROR] ¡El directorio de trabajo '$TARGET_DIR' no está limpio!"
  echo "        Por favor, haz 'commit' o 'stash' de tus cambios antes de ejecutar este script."
  echo "        Puedes ver los cambios con: git status"
  echo
  echo "SCRIPT ABORTADO."
  exit 1 # Salir con código de error
else
  echo "    OK: El directorio de trabajo está limpio. Continuando..."
fi
echo

# --- Paso 2: Cambiar a la rama Staging ---
echo ">>> PASO 2: Cambiando a la rama '$BRANCH_STAGING'..."
echo "    Ejecutando comando: git checkout $BRANCH_STAGING"
echo "    -------------------- Salida de Git ---------------------"
git checkout "$BRANCH_STAGING"
# Verificar el código de salida del último comando ($?)
if [ $? -ne 0 ]; then
  echo "    --------------------------------------------------------"
  echo "[ERROR] ¡Falló el cambio a la rama '$BRANCH_STAGING'!"
  echo "        Asegúrate de que la rama '$BRANCH_STAGING' exista localmente en este repositorio."
  echo "        Puedes intentar actualizar tus ramas remotas con: git fetch origin"
  echo
  echo "SCRIPT ABORTADO."
  exit 1 # Salir con código de error
else
  echo "    --------------------------------------------------------"
  echo "    ÉXITO: Ahora estás en la rama '$BRANCH_STAGING'."
fi
echo

# --- Paso 3: Hacer Merge desde la rama Origen ---
echo ">>> PASO 3: Fusionando (merge) cambios desde '$BRANCH_ORIGEN' hacia '$BRANCH_STAGING'..."
echo "    Ejecutando comando: git merge $BRANCH_ORIGEN"
echo "    -------------------- Salida de Git ---------------------"
git merge "$BRANCH_ORIGEN"
# Verificar el código de salida
if [ $? -ne 0 ]; then
  echo "    --------------------------------------------------------"
  echo "[ERROR] ¡Falló el merge de '$BRANCH_ORIGEN' en '$BRANCH_STAGING'!"
  echo "        Posibles causas:"
  echo "        * CONFLICTOS DE MERGE: Es necesario resolverlos manualmente."
  echo "            -> Revisa los archivos marcados con 'git status'."
  echo "            -> Edita los archivos para resolver los conflictos."
  echo "            -> Añade los archivos resueltos con 'git add <archivo>'."
  echo "            -> Completa el merge con 'git commit' (o 'git merge --continue')."
  echo "            -> O aborta el merge con 'git merge --abort'."
  echo "        * La rama '$BRANCH_ORIGEN' no existe o no tiene commits nuevos respecto a '$BRANCH_STAGING'."
  echo
  echo "SCRIPT ABORTADO. Se requiere intervención manual dentro de '$TARGET_DIR'."
  # Nota: El script no puede continuar automáticamente si hay conflictos.
  exit 1 # Salir con código de error
else
  echo "    --------------------------------------------------------"
  echo "    ÉXITO: Los cambios de '$BRANCH_ORIGEN' se han fusionado correctamente en '$BRANCH_STAGING'."
  echo "    INFO: Puede que necesites empujar (push) los cambios a tu repositorio remoto:"
  echo "          git push origin $BRANCH_STAGING"
fi
echo

# --- Paso 4: Volver a la rama Origen ---
echo ">>> PASO 4: Volviendo a la rama '$BRANCH_ORIGEN'..."
echo "    Ejecutando comando: git checkout $BRANCH_ORIGEN"
echo "    -------------------- Salida de Git ---------------------"
git checkout "$BRANCH_ORIGEN"
# Verificar el código de salida
if [ $? -ne 0 ]; then
  echo "    --------------------------------------------------------"
  echo "[ERROR] ¡Falló el cambio de vuelta a la rama '$BRANCH_ORIGEN'!"
  echo "        Esto es inusual si los pasos anteriores funcionaron correctamente."
  echo "        Revisa los mensajes de error de Git."
  echo
  echo "SCRIPT FINALIZADO CON ERRORES (en el último paso)."
  exit 1 # Salir con código de error
else
  echo "    --------------------------------------------------------"
  echo "    ÉXITO: Ahora estás de vuelta en la rama '$BRANCH_ORIGEN'."
fi
echo

# --- Finalización ---
echo "----------------------------------------------------------------------"
echo "  SCRIPT DE MERGE COMPLETADO EXITOSAMENTE"
echo "  Directorio de trabajo: $(pwd)"
echo "----------------------------------------------------------------------"
echo "Resumen de acciones realizadas:"
echo "1. Cambio al directorio '$TARGET_DIR'."
echo "2. Verificado estado limpio del repositorio."
echo "3. Checkout a la rama '$BRANCH_STAGING'."
echo "4. Merge de '$BRANCH_ORIGEN' en '$BRANCH_STAGING'."
echo "5. Checkout de vuelta a la rama '$BRANCH_ORIGEN'."
echo
echo "¡Listo!"

# Nota: El script termina DENTRO del directorio $TARGET_DIR.
# Si quisieras volver al directorio original, podrías añadir 'cd ..' al final.

exit 0 # Salir indicando éxito