#!/bin/bash
# ---------------------------------------------------------
# Script de Inicialización de VPS para Laravel (Zero Downtime)
# Destino: /var/www/sur/denuncias
# ---------------------------------------------------------

# Salir inmediatamente si un comando falla
set -e

APP_NAME="denuncias"
BASE_DIR="/var/www/sur/$APP_NAME"
SHARED_DIR="$BASE_DIR/shared"
RELEASES_DIR="$BASE_DIR/releases"
WEB_USER="www-data"

echo "=========================================================="
echo "🚀 Iniciando preparación del entorno para: $APP_NAME"
echo "Directorio Base: $BASE_DIR"
echo "=========================================================="

# 1. Crear estructura de directorios maestra
echo "📁 Creando arbol de directorios principal..."
sudo mkdir -p $RELEASES_DIR
sudo mkdir -p $SHARED_DIR/storage/app/public
sudo mkdir -p $SHARED_DIR/storage/framework/cache/data
sudo mkdir -p $SHARED_DIR/storage/framework/sessions
sudo mkdir -p $SHARED_DIR/storage/framework/testing
sudo mkdir -p $SHARED_DIR/storage/framework/views
sudo mkdir -p $SHARED_DIR/storage/logs

# 2. Archivo .env inicial
echo "⚙️ Configurando archivo .env compartido..."
if [ ! -f "$SHARED_DIR/.env" ]; then
    sudo touch $SHARED_DIR/.env
    echo "APP_NAME=$APP_NAME" | sudo tee $SHARED_DIR/.env > /dev/null
    echo "APP_ENV=production" | sudo tee -a $SHARED_DIR/.env > /dev/null
    echo "APP_DEBUG=false" | sudo tee -a $SHARED_DIR/.env > /dev/null
    # Se añade nota para que el admin lo complete
    echo "# TODO: Configurar DB, Redis, Mail, etc." | sudo tee -a $SHARED_DIR/.env > /dev/null
    echo "✅ Archivo .env vacio creado en $SHARED_DIR/.env"
else
    echo "⚠️ El archivo .env ya existe. Se omitió su creación."
fi

# 3. Establecer Propietario (Nginx/Apache)
echo "👤 Asignando propiedad recursiva al usuario web ($WEB_USER)..."
sudo chown -R $WEB_USER:$WEB_USER $BASE_DIR

# 4. Establecer Permisos Base (Lectura/Ejecución estándar)
echo "🔒 Configurando permisos 755 para directorios y 644 para archivos..."
sudo find $BASE_DIR -type d -exec chmod 755 {} \;
sudo find $BASE_DIR -type f -exec chmod 644 {} \;

# 5. Permisos Especiales de Escritura para Laravel Storage
echo "📂 Dando permisos especiales de escritura (775) al Storage..."
sudo find $SHARED_DIR/storage -type d -exec chmod 775 {} \;
sudo find $SHARED_DIR/storage -type f -exec chmod 664 {} \;

# 6. Crear un Release Inicial Falso (Para que el Server no falle si Nginx ya apunta ahí)
echo "🔗 Creando symlink inicial ('current')..."
INITIAL_RELEASE="$RELEASES_DIR/19700101000000"
sudo -u $WEB_USER mkdir -p $INITIAL_RELEASE/public
echo "<h1>Deployment en preparacion...</h1>" | sudo -u $WEB_USER tee $INITIAL_RELEASE/public/index.php > /dev/null

# Enlazar storage y env al release falso (Simulando lo que hará Github Actions)
sudo -u $WEB_USER ln -s $SHARED_DIR/storage $INITIAL_RELEASE/storage
sudo -u $WEB_USER ln -s $SHARED_DIR/.env $INITIAL_RELEASE/.env

# Enlazar 'current' al release inicial
sudo -u $WEB_USER ln -sfn $INITIAL_RELEASE $BASE_DIR/current

echo "=========================================================="
echo "🎉 ¡Preparación finalizada con éxito!"
echo ""
echo "Recuerda apuntar tu servidor web (Nginx/Apache) a:"
echo "👉 $BASE_DIR/current/public"
echo ""
echo "Edita tu archivo .env antes de hacer el primer deploy:"
echo "👉 sudo nano $SHARED_DIR/.env"
echo "=========================================================="
