#!/bin/bash
# ============================================================
# MESSAGER - Deploy staging (auto-suffisant)
# Copie et execute par le pipeline Bitbucket
# ============================================================
set -e

DEPLOY_ROOT="/home/ceterisprime/public_html/app/connect"
SERVICE_DIR="$DEPLOY_ROOT/messager"
DB_NAME="ceterisprime_messager"
GIT_BRANCH="master"
REPO_SLUG="messager"
PHP_BIN="php"
COMPOSER_BIN="composer"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$DEPLOY_ROOT/backups"

# Git URL (auth via env vars du pipeline)
GIT_URL="https://bitbucket.org/alcyonpartners/$REPO_SLUG.git"
if [ -n "$GIT_USER" ] && [ -n "$GIT_TOKEN" ]; then
    GIT_URL="https://$GIT_USER:$GIT_TOKEN@bitbucket.org/alcyonpartners/$REPO_SLUG.git"
fi

echo "[DEPLOY] ========== Deploiement MESSAGER (staging) =========="

mkdir -p "$SERVICE_DIR"

# Reparer repo git corrompu
if [ -d "$SERVICE_DIR/.git" ] && ! git -C "$SERVICE_DIR" rev-parse --git-dir >/dev/null 2>&1; then
    echo "[WARN] Repo git corrompu, re-clone..."
    rm -rf "$SERVICE_DIR"
    mkdir -p "$SERVICE_DIR"
fi

# Clone ou pull
if [ ! -d "$SERVICE_DIR/.git" ]; then
    echo "[INFO] Premier deploiement: clone..."
    git clone --branch "$GIT_BRANCH" "$GIT_URL" "$SERVICE_DIR"
    cd "$SERVICE_DIR"
    git remote set-url origin "https://bitbucket.org/alcyonpartners/$REPO_SLUG.git" 2>/dev/null || true
    # Setup .env
    if [ ! -f ".env" ] && [ -f ".env.example" ]; then
        echo "[INFO] Creation .env depuis .env.example..."
        cp .env.example .env
        sed -i "s|APP_ENV=.*|APP_ENV=staging|" .env
        sed -i "s|APP_DEBUG=.*|APP_DEBUG=false|" .env
        sed -i "s|DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" .env
        sed -i "s|DB_USERNAME=.*|DB_USERNAME=ceterisprime_connect|" .env
        [ -f "$DEPLOY_ROOT/.db_password" ] && sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=$(cat $DEPLOY_ROOT/.db_password)|" .env
        NEED_KEY_GENERATE=true
    fi
else
    cd "$SERVICE_DIR"
    $PHP_BIN artisan down --render="errors::503" 2>/dev/null || true
    # Backup DB
    mkdir -p "$BACKUP_DIR/messager"
    mysqldump -u ceterisprime_connect -p"$(cat $DEPLOY_ROOT/.db_password 2>/dev/null)" "$DB_NAME" \
        > "$BACKUP_DIR/messager/${DB_NAME}_${DATE}.sql" 2>/dev/null || echo "[WARN] Backup echoue (non bloquant)"
    find "$BACKUP_DIR/messager" -name "*.sql" -mtime +30 -delete 2>/dev/null || true
    # Pull
    [ -n "$GIT_USER" ] && git remote set-url origin "$GIT_URL"
    echo "[INFO] Mise a jour du code..."
    git fetch origin && git reset --hard "origin/$GIT_BRANCH"
    git remote set-url origin "https://bitbucket.org/alcyonpartners/$REPO_SLUG.git" 2>/dev/null || true
fi

# .env.staging override
[ -f ".env.staging" ] && cp .env.staging .env && echo "[INFO] .env.staging applique"

# Composer
echo "[INFO] Composer install..."
$COMPOSER_BIN install --no-dev --optimize-autoloader --no-interaction 2>&1

# Key generate (first deploy)
[ "${NEED_KEY_GENERATE:-}" = "true" ] && $PHP_BIN artisan key:generate --force

# Migrations
echo "[INFO] Migrations..."
$PHP_BIN artisan migrate --force

# Cache
$PHP_BIN artisan config:clear
$PHP_BIN artisan route:cache
$PHP_BIN artisan view:cache
$PHP_BIN artisan event:cache 2>/dev/null || true

# Permissions
chmod -R 775 storage bootstrap/cache 2>/dev/null || true
chown -R ceterisprime:ceterisprime . 2>/dev/null || true

# Queue restart
$PHP_BIN artisan queue:restart 2>/dev/null || true

# Demarrer queue worker (sans sudo, PID file)
PIDFILE="$SERVICE_DIR/storage/logs/queue-worker.pid"
if [ -f "$PIDFILE" ]; then
    OLD_PID=$(cat "$PIDFILE" 2>/dev/null)
    [ -n "$OLD_PID" ] && kill "$OLD_PID" 2>/dev/null || true
    rm -f "$PIDFILE"
fi
echo "[INFO] Demarrage queue worker messager..."
nohup $PHP_BIN artisan queue:work database \
    --queue="default,bmp_operations,spc_appro,air_parse,bmp_daily_collection,estair_default" \
    --sleep=3 --tries=3 \
    >> storage/logs/queue-worker.log 2>&1 &
echo $! > "$PIDFILE"
disown
echo "[INFO] Queue worker demarre (PID $(cat $PIDFILE))"

# Up
$PHP_BIN artisan up

# Health check
sleep 3
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:8112" --max-time 15 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "302" ]; then
    echo "[INFO] messager OK (HTTP $HTTP_CODE)"
else
    echo "[WARN] messager health check: HTTP $HTTP_CODE"
fi

echo "[DEPLOY] ========== MESSAGER deploye avec succes =========="
